【问题标题】:FormCollection parameter is empty while using @Ajax.BeginForm and @Ajax.ActionLink使用 @Ajax.BeginForm 和 @Ajax.ActionLink 时 FormCollection 参数为空
【发布时间】:2014-06-06 13:33:27
【问题描述】:

我已经解决了一大堆关于我的问题的 SO 问题,但我无法找到解决方案,所以我决定发布这个问题。问题是,当我通过单击_Sidebar.cshtml 中的搜索按钮执行 Ajax POST 请求时,FormColection fc 为空。我在这里想念什么?

代码部分:
_MyLayout.cshtml:

@using (Ajax.BeginForm("Results", "Search", null, new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "d_content", LoadingElementId = "spinner", OnBegin = "ToggleContent", OnComplete = "ToggleContent" },null))
{
    <div class="wrapper row-offcanvas row-offcanvas-left">
        <div id="a_sidebar">
            @{ Html.RenderAction("_Sidebar"); }
        </div>
        <aside class="right-side">
            <section class="content">
                <img id="spinner" src="~/Content/img/lightbox-ico-loading.gif" style="display: none;">
                <div id="d_content">
                    @RenderBody()
                </div>
            </section>
        </aside>
    </div>
}

_Sidebar.cshtml:

<ul class="treeview-menu">
                <li>
                    <div class="form-group">
                        <label>F1</label> 
                        @Html.ListBox("ddF1", (MultiSelectList)ViewData["ddF1"])
                    </div>
                    <div class="form-group">
                        <label>F2</label>
                        @Html.ListBox("ddF2", (MultiSelectList)ViewData["ddF2"])
                    </div>
                    <div class="form-group">
                        <label>Status</label>
                        @Html.ListBox("ddStatusFilter", (MultiSelectList)ViewData["ddStatusFilter"])
                    </div>
                    <div class="form-group">
                        <label>Name</label>
                        @Html.TextBox("tbName")
                    </div>
                </li>
            </ul>

<li class="treeview">

            <div style="text-align: center;">
                <button type="reset" class="btn btn-warning">Clear Filters</button>
                @Ajax.ActionLink("Search", "Results", "Search", new { }, new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "d_content", LoadingElementId = "spinner", OnBegin = "ToggleContent", OnComplete = "ToggleContent" }, new { @class = "btn btn-success", @style = "color: white;" })
            </div>
        </li>

SearchController.cs:

[HttpPost]
[AcceptVerbs(HttpVerbs.Post)]
public PartialViewResult Results(FormCollection fc)
{
    //TODO: Implement filtering through FormCollection in passed parameter
    //      but that freakin' fc var is empty
    var model = db.vw_MainTable.ToList();
    return PartialView("_SearchResultGrid", model);
}

非常感谢。

【问题讨论】:

  • 您是否尝试过将搜索链接设为提交按钮?

标签: ajax asp.net-mvc-4 formcollection ajaxhelper


【解决方案1】:

从代码看来,您似乎不需要覆盖整个 html 的表单标签。你可以像这样把它放在_Sidebar.cshtml中。

还将操作链接替换为提交按钮(检查下面的代码)。

@using (Ajax.BeginForm("Results", "Search", null, new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "d_content", LoadingElementId = "spinner", OnBegin = "ToggleContent", OnComplete = "ToggleContent" },null))
{
             <ul class="treeview-menu">
                <li>
                    <div class="form-group">
                        <label>F1</label> 
                        @Html.ListBox("ddF1", (MultiSelectList)ViewData["ddF1"])
                    </div>
                    <div class="form-group">
                        <label>F2</label>
                        @Html.ListBox("ddF2", (MultiSelectList)ViewData["ddF2"])
                    </div>
                    <div class="form-group">
                        <label>Status</label>
                        @Html.ListBox("ddStatusFilter", (MultiSelectList)ViewData["ddStatusFilter"])
                    </div>
                    <div class="form-group">
                        <label>Name</label>
                        @Html.TextBox("tbName")
                    </div>
                </li>
           </ul>    
           <li class="treeview">
            <div style="text-align: center;">
                <button type="reset" class="btn btn-warning">Clear Filters</button>
                <button type="submit" class="btn"> Search</button>
            </div>
           </li
}

【讨论】:

    【解决方案2】:

    这可能有多种原因。就我而言,这是因为我的表单字段只有 ID 属性而不是 Name 属性。

    将 Name 属性添加到输入字段后,Controller 可以正常看到它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 2011-09-14
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      相关资源
      最近更新 更多