C# MVC Ajax.begin帮助程序未达到操作
AjaxOptions定义如下所示:C# MVC Ajax.begin帮助程序未达到操作,c#,asp.net-mvc,razor,asp.net-ajax,C#,Asp.net Mvc,Razor,Asp.net Ajax,AjaxOptions定义如下所示: @using VaultSearch.Models @model UserInfo @{ ViewBag.Title = "Vault Search Engine"; AjaxOptions ajaxOptionsDocGroupsForm = new AjaxOptions { UpdateTargetId = "divSearchFieldRows",
@using VaultSearch.Models
@model UserInfo
@{
ViewBag.Title = "Vault Search Engine";
AjaxOptions ajaxOptionsDocGroupsForm = new AjaxOptions
{
UpdateTargetId = "divSearchFieldRows",
Url = Url.Action("GetDocGroupSearchFields"),
LoadingElementId = "loadingSearchFields",
LoadingElementDuration = 5000,
};
}
@using (Ajax.BeginForm(ajaxOptionsDocGroupsForm))
{
@Html.Action("GetDocumentGroups", new { userId = Model.Id })
<button type="submit">Get Search Fields >></button>
}
使用它的Ajax.beginfom帮助程序能够显示加载元素。
但是URL.Action,GetDocGroupSearchFields,应该返回PartialVeiwResult,似乎没有被调用
看起来是这样的:
@using VaultSearch.Models
@model UserInfo
@{
ViewBag.Title = "Vault Search Engine";
AjaxOptions ajaxOptionsDocGroupsForm = new AjaxOptions
{
UpdateTargetId = "divSearchFieldRows",
Url = Url.Action("GetDocGroupSearchFields"),
LoadingElementId = "loadingSearchFields",
LoadingElementDuration = 5000,
};
}
@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>
但它只是没有点击Home Controller:GetDocGroupSearchFields中的操作,现在看起来就像这样:
public PartialViewResult GetDocGroupSearchFields(int docGroupId)
{
List<DocumentGroupField> searchFields = new List<DocumentGroupField>();
return PartialView();
}
返回的部分视图如下所示:
@using VaultSearch.Models
@model List<DocumentGroupField>
<b>Search Fields!!!</b>
所以,我唯一真正能做的就是加载部分
我从亚当·弗里曼(Adam Freeman)的一本书《Pro ASP.Net MVC 4》第21章学到了所有这些概念
我在这里也做了同样的事情。我不明白为什么它不起作用。
Adam在他的示例中没有指定任何post谓词或ChildAction属性,并且所有属性都正常工作。您的控制器操作似乎需要docGroupId整数参数。在你看来,你从来没有给它提供过价值。因此,当您在FireBug或Chrome Developer工具栏中查看发送到服务器的AJAX请求时,您将看到服务器的响应: 所需参数docGroupId未提供值 因此,请确保在生成url时为此参数提供一个值,或者如果不想传递值,请将其设置为可为空的整数:
Url = Url.Action("GetDocGroupSearchFields", new { docGroupId = "123" })
或者,您可以将其作为隐藏字段包含在表单中:
@Html.Hidden("docGroupId", "123")
我刚刚注意到Ajax.beginfom助手在呈现的表单中放置了一个method=post。因此,我刚刚在返回PartialViewResult的操作中添加了一个[HttpPost]属性。谢谢-我现在删除了docId参数,并通过AJAX助手获得了部分视图。