这是我的控制器动作的样子
[HttpPost]
[OutputCache(Location = OutputCacheLocation.None)]
public ActionResult GetData(string Key, string Physician)
{
string physicianCode = Physician.Split(' ').ElementAt(0).Trim();
CaseProfile caseProfile = HttpContext.Cache.Get(Key) as CaseProfile;
return PartialView("_CaseProfile", caseProfile);
}
这是我在jQuery对话框
中显示的部分视图_CaseProfile上的内容<div id="paged-case-profile-div">
@using (Ajax.BeginForm("GetData", "Group",
new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "paged-case-profile-div"
, OnSuccess="OnSuccess", OnComplete="OnComplete", InsertionMode=InsertionMode.Replace }))
{
@Html.HiddenFor(m => m.Key)
@Html.DropDownList("Physician", Model.PhysicianSelectList,
new { style = "font-size: 11px;", onchange = "this.form.submit();" })
<div>
@{
var grid = new WebGrid(source: Model.Items.AsEnumerable(),
canPage: true, canSort: false, rowsPerPage: 10);
}
@grid.GetHtml(
htmlAttributes: new { align = "center" },
tableStyle: "table",
headerStyle: "header-row",
alternatingRowStyle: "alternate-row",
columns:
physicianGrid.Columns(
physicianGrid.Column("PatientId", "Patient Id"),
physicianGrid.Column("MedRecNum", "Med Rec Num"),
physicianGrid.Column("AdmissionDate", "Admission Date")))
</div>
}
</div>
我的所有js文件都添加在_Layout.cshtml文件中。 我想在下拉列表中回复ajax并使用控制器操作返回的最新内容更新paged-case-profile-div。 问题是从服务器返回的新内容被渲染到新页面,这不是我想要的。我只是想在ajax表单之外的div更新新内容。 请注意,我只是在OnSuccess和OnComplete javascript方法上显示警告框。 你能告诉我我的代码有什么问题吗?
另外 - 请注意我已经检查了stackoverflow上几乎所有相关的问题,但是它们似乎都没有帮助我。如果有人能指出我的代码中的错误并给我建议纠正它而不是指向其他一些问题/帖子,我将不胜感激。
答案 0 :(得分:0)
确保您已将 < / p> <击>
jquery.unobtrusive-ajax.js
脚本引用到您的网页,或Ajax.BeginForm
帮助程序与标准Html.BeginForm
帮助程序没有任何不同:
<script type="text/javascript" src="@rl.Content("~/scripts/jquery.unobtrusive-ajax.js")"></script>
击> <击> 撞击>
在下拉列表中尝试替换:
onchange="this.form.submit();"
使用:
onchange="$(this).closest('form').submit()"
或者给你的Ajax表单一个id然后:
onchange="$('#myajaxform').submit()"
执行this.form.submit();
时,您正在调用底层DOM元素的submit事件,该事件不会执行已订阅此表单的任何onsubmit处理程序。