【问题标题】:How to pass a list as a parameter to a controller in MVC C#如何将列表作为参数传递给MVC C#中的控制器
【发布时间】:2020-03-20 21:17:42
【问题描述】:

我有一个绑定到我的视图的列表,并且我还有一个 URL 操作重定向,我想在该列表中获取并将其作为参数传递给我的控制器。我可以看到调用 URL 操作时列表不为空,但是当它到达控制器时,列表的值为空

我的观点

 <table class="table table-bordered">
        <thead>
            <tr>
                <th>SearchTerm</th>
                <th>SelectedSearchCondition</th>
                <th>SelectedFieldToSearch</th>

            </tr>
        </thead>
        <tbody>
            @foreach (var item in ListOfConditions)
            {
                <tr>

                    <td>@item.SearchTerm</td>
                    <td>@item.SelectedSearchCondition</td>
                    <td>@item.SelectedFieldToSearch</td>

                </tr>
            }
        </tbody>


    </table>
}
    <script type="text/javascript">
        $(document).ready(function () {
            $('#loadSearchResults').on('click', loadFilteredSearchResults)
        });
        function loadFilteredSearchResults() {
            //alert('I have been clicked')
             window.location.href = '@Url.Action("DisplayFilteredSearchResults", "FilteredSearch",ListOfConditions)';
        }
    </script>

**我的控制器方法**

public ActionResult DisplayFilteredSearchResults(List<string>ListOfConditions)
        {

            ListOfConditions.Count();
            //ListOfConditions.Add(searchInfo);
            //var model = ListOfConditions.Where(x => x.SelectedFieldToSearch.Equals(SelectFieldToSearch) && x.SelectedSearchCondition.Equals(SelectedSearchCondition) && x.SearchTerm.Equals(SearchTerm));
            return View(new AdvancedSearchModel());

        }

【问题讨论】:

标签: javascript c# asp.net-mvc razor model-binding


【解决方案1】:

试试这个:'@Url.Action("DisplayFilteredSearchResults", "FilteredSearch", new { ListOfConditions })',Url.Action 需要使用一个具有名为ListOfConditions 的属性的对象。 https://docs.microsoft.com/en-us/dotnet/api/system.web.mvc.urlhelper.action?view=aspnet-mvc-5.2#System_Web_Mvc_UrlHelper_Action_System_String_System_String_System_Object_

【讨论】:

    【解决方案2】:

    我想建议Url.Action 的替代方法。原因是因为我尽可能避免混合 Razor 和 javacript 代码,因为它们不属于一起。您还可以获得不需要使用内联 javascript 的好处,这是另一种不好的做法。您想要做的是动态生成一个 GET 请求,因此我的方法是使用 GET 方法创建一个表单。这是它的外观。

    $(document).ready(function () {
        $('#loadSearchResults').on('click', loadFilteredSearchResults)
    });
    function loadFilteredSearchResults(e) {
        e.preventDefault();
        var conditionCount = ListOfConditions.length;
        var form = document.createElement("form");
        form.method = "get";
        form.action = '/FilteredSearch/DisplayFilteredSearchResults';
    
        for (var i = 0; i < conditionCount; i++) {
            var input = document.createElement('input');
            input.setAttribute("type", "hidden");
            input.setAttribute("value", ListOfConditions[i]);
            input.setAttribute("name", "ListOfConditions");
            form.appendChild(input);
        }
        document.body.appendChild(form);
        form.submit(); 
    }
    

    如您所见,我们创建表单、设置方法、设置操作,然后将 ListOfConditions 数据添加到表单中,然后提交。然后,浏览器通过提交带有所需查询字符串的 url 为我们完成工作,然后控制器将获取并使用标准模型绑定来填充您的 List&lt;string&gt; ListOfConditions

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多