请原谅,我是 MVC 和 AJAX 新手。
目前我只是提交一个表单,我想使用表单中的数据使用ajax更新部分 View 中的表。
我的_UserInfo
部分 View 如下所示:
@model IEnumerable<Dashboard.Models.UserInfo>
<table>
<tr>
<th>
Firstname
</th>
<th>
Lastname
</th>
<th>
EmailAddress
</th>
<th>
</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.firstName)
</td>
<td>
@Html.DisplayFor(modelItem => item.surname)
</td>
<td>
@Html.DisplayFor(modelItem => item.emailAddress)
</td>
<td>
@Html.DisplayFor(modelItem => item.SAMuserName)
</td>
</tr>
}
</table>
我的主用户
View 如下所示:
@model Dashboard.Models.User
@Scripts.Render("~/bundles/jqueryval")
@using (Ajax.BeginForm("_UserInfo", "User", new AjaxOptions()
{
HttpMethod = "GET",
UpdateTargetId = "results",
InsertionMode = InsertionMode.Replace
}))
{
<fieldset>
//...My Form
<p>
<input type="submit" value="Find" />
</p>
</fieldset>
}
<div id="results">
</div>
最后这是我的UserController
:
public PartialViewResult UserResults(User person)
{
UserInfo personInfo = new UserInfo();
//....Doing stuff
return PartialView("_userInfo", personInfo);
}
现在我知道这可能不好。但这是我以我有限的知识尝试过的最好的尝试。
当我单击“用户” View 上的按钮时,收到 404 错误,指出找不到 _UserInfo。
我相信我所有问题的根源在于
@using (Ajax.BeginForm("_UserInfo", "User", new AjaxOptions()
{
HttpMethod = "GET",
UpdateTargetId = "results",
InsertionMode = InsertionMode.Replace
}))
但据我所知,我不知道出了什么问题。
*编辑:*正如有人向我指出的那样,我错误地创建了 HTML 表单。我已经将其更改为
@using (Ajax.BeginForm("UserResults", "User", new AjaxOptions(){...}
我的行动现在正在被调用!但是,我的部分 View 没有加载到屏幕上。
最佳答案
对于您的特定重载,前两个字符串是 ActionName 和 ControllerName MSDN 。因此,它应该像这样镜像您的 Controller :
@using (Ajax.BeginForm("userResults", "User", new AjaxOptions()
{
HttpMethod = "GET",
UpdateTargetId = "results",
InsertionMode = InsertionMode.Replace
}))
此外,值得注意的是,在以下命名约定中,userResults 应该重命名为 UserResults
编辑: 确保您同时使用 Ajax.BeginForm (请参阅更新),并且您还已将 ajax unobtrusive 脚本包含到您的包中。在 BundleConfig.RegisterBundles 中,您应该添加以下 bundle 。
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.unobtrusive*"));
并在 HTML 中,确保调用两个包。
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
关于c# - 使用 AJAX 加载部分 View 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19864458/