MVC Ajax.BeginForm 帮助程序未达到操作

本文关键字:未达到 操作 帮助程序 BeginForm Ajax MVC | 更新日期: 2023-09-27 18:28:42

AjaxOptions 定义如下所示:

    @using VaultSearch.Models
    @model UserInfo
    @{
        ViewBag.Title = "Vault Search Engine";
        AjaxOptions ajaxOptionsDocGroupsForm = new AjaxOptions
        {
            UpdateTargetId = "divSearchFieldRows",
            Url = Url.Action("GetDocGroupSearchFields"),
            LoadingElementId = "loadingSearchFields",
            LoadingElementDuration = 5000,
        };
     }

使用它的 Ajax.BeginFrom 帮助程序能够显示加载元素。但是网址。操作"GetDocGroupSearchFields",应该返回一个 PartialVeiwResult 似乎没有被调用。

从看起来像这样:

 @using (Ajax.BeginForm(ajaxOptionsDocGroupsForm))
{
    @Html.Action("GetDocumentGroups", new { userId = Model.Id })
    <button type="submit">Get Search Fields >></button>
}

渲染的 html 是这样的:

<div class="docGroupsWrapper">
    <form action="/" data-ajax="true" data-ajax-loading="#loadingSearchFields" data-ajax-loading-duration="5000" data-ajax-mode="replace" data-ajax-update="#divSearchFieldRows" data-ajax-url="/Home/GetDocGroupSearchFields" id="form0" method="post">
    <b>Document Groups:</b>
    <select id="DocGroupItems" name="DocGroupItems">
        <option value="">--Select One--</option>
        <option value="3">AuthLetters</option>
        <option value="4">SummaryVouchers</option>
        <option value="5">ExplanationOfBenefits</option>
    </select>
    <button type="submit">Get Search Fields >></button>
    </form>
    <div id="divSearchFields" class="searchFieldsWrapper">
    <div id="loadingSearchFields" class="load" style="display:none">
        <p>loading Document Search Fields...</p>
    </div> 
    <div id="divSearchFieldRows">
        <span class="instructions">
             Choose a Document Group from above to see columns to search with. >>
         </span>
    </div>
</div>

但它只是没有点击家庭控制器中的操作:GetDocGroupSearchFields,现在看起来像这样:

public PartialViewResult GetDocGroupSearchFields(int docGroupId)
    {
        List<DocumentGroupField> searchFields = new List<DocumentGroupField>();
        return PartialView();
    }

返回的分部视图就是这样:

@using VaultSearch.Models
@model List<DocumentGroupField>
<b>Search Fields!!!</b>

所以,我唯一真正有效的是加载div。

所有这些概念都来自Adam Freeman的APRESS书:Pro ASP.Net MVC 4,Chapter 21 buildup。

我在这里做几乎同样的事情。无法弄清楚为什么它不起作用。Adam 在他的示例中没有指定任何后置谓词或 ChildAction 属性,并且它都在工作。

MVC Ajax.BeginForm 帮助程序未达到操作

您的控制器操作似乎需要一个docGroupId整数参数。在您看来,您永远不会为其提供价值。因此,当您在FireBug或Chrome开发人员工具栏中查看发送到服务器的AJAX请求时,您将看到来自服务器的响应:

尚未为必需的参数 docGroupId 提供值。

因此,请确保在生成 url 时为此参数提供一个值,或者如果您不打算向其传递值,请将其设置为可为空的整数:

Url = Url.Action("GetDocGroupSearchFields", new { docGroupId = "123" })

或者,您可以将其作为隐藏字段包含在表单中:

@Html.Hidden("docGroupId", "123")