代码之家  ›  专栏  ›  技术社区  ›  MKF

似乎无法呈现部分视图-控制器未被命中

  •  0
  • MKF  · 技术社区  · 7 年前

    我有一个下拉列表,我想呈现一个局部视图取决于所选的项目。为此,我使用jquery和mvc5。在控制器中设置断点之后,当我更改下拉选择时,Url.Action()调用似乎没有到达那里。我不确定我是否了解如何正确使用路由值,所以可能就是这样。这就是我得到的:

    起始视图的相关部分

    <div>
            @if (role == "admin")
             {
                <p>Choose state to view:</p>
                <select id="stateList">
                    <option value="AL">Alabama</option>
                    <option value="AR">Arkansas</option>
                    <option value="DE">Delaware</option>
                    <option value="FL">Florida</option>
                    <option value="GA">Georgia</option>
                    <option value="IA">Iowa</option>
                    <option value="IL">Illinois</option>
                    <option value="IN">Indiana</option>
                    <option value="KS">Kansas</option>
                    <option value="KY">Kentucky</option>
                    <option value="LA">Louisiana</option>
                    <option value="MD">Maryland</option>
                    <option value="MS">Mississippi</option>
                    <option value="MO">Missouri</option>
                    <option value="NC">North Carolina</option>
                    <option value="NE">Nebraska</option>
                    <option value="NJ">New Jersey</option>
                    <option value="OH">Ohio</option>
                    <option value="OK">Oklahoma</option>
                    <option value="SC">South Carolina</option>
                    <option value="TN">Tennessee</option>
                    <option value="TX">Texas</option>
                    <option value="VA">Virginia</option>
                    <option value="WV">West Virginia</option>
                </select>
                <div id="#partialPlaceHolder">
    
                </div>
            }
    

    //Load partial view when an admin changes the state selection
        $('#stateList').change(function () {
            var selection = $(this).val();
            var url = '@Url.Action("StateData", "Visualizations")' + '?StateID=' + selection;
            //url ends up looking like this: /Visualizations/StateData?StateID=IA  (or some other state abbreviation)
            $("#partialPlaceHolder").load(url, function () {
                    console.log("it worked");
             });
          });
    

    模型

    public class VisualizationModels
    {
        public String StateID { get; set; }
    }
    

    生成局部视图的控制器

    public ActionResult StateData(string stateID)
        {
            VisualizationModels vm = new VisualizationModels();
            vm.StateID = stateID;
            return PartialView("_SpecificStateData", vm);
        }
    

    $.get 而不是 @Url.Action ,我将实际点击控制器操作,它只是因为某些原因现在不会呈现局部视图。。。

    //Load partial view when an admin changes the state selection
        $('#stateList').change(function () {
            var selection = $(this).val();
            var url = '/Visualizations/StateData?StateID=' + selection;
            $.get(url, function (data) {
                $('#partialPlaceHolder').html(data);
            });
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   Rajput    7 年前

    你不能用这样的东西吗

     var url = '@Url.Action("StateData", "Visualizations", new { StateID = selection})'
    

    而不是

     var url = '@Url.Action("StateData", "Visualizations")' + '?StateID=' + selection;
    

    检查一下这是否有效。因为如果你的参数传递不正确。路由处理程序将无法映射正确的操作方法。

        2
  •  0
  •   MKF    7 年前

    id 我的 div 错了。。。

    错误:

    <div id="#partialPlaceHolder"></div>
    

    <div id="partialPlaceHolder"></div>
    

    现在一切正常。最终JS如下所示:

    //Load partial view when an admin changes the state selection
        $('#stateList').change(function () {
            var selection = $(this).val();
            var url = '@Url.Action("StateData", "Visualizations", new { StateID = "_state" })'.replace("_state", selection);
            $("#partialPlaceHolder").load(url, function () {
                    console.log("it worked");
            });
        });