【发布时间】:2012-06-01 00:18:25
【问题描述】:
我正在使用 MVC4。在我的项目中启用并引用了不显眼的 JavaScript。 Ajax 脚本正在我的共享母版页中加载。 FireBug 没有报告任何错误或 404。
我在我的页面中添加了一个Text 框,它更新了我的Ajax 表单内的Hidden 字段的内容。当用户按下一个键并触发 KeyUp 事件时,我通过调用强制我的 Ajax 表单提交:
$("form#ajaxForm").trigger("submit");
其中 ajaxForm 是 Ajax 表单的名称。这工作正常。表单在幕后提交,我的控制器事件触发。模型会根据用户的输入使用新数据进行更新。
然而,奇怪的是当结果返回到我的表单时。我的表单div 标记的全部内容被替换为结果——即整个页面。
<div id="basic-modal-content"">
<input id="breed" type="text"/>
<div>
<form id="ajaxForm" method="post" data-ajax-update="#results" data-ajax-mode="replace" data-ajax="true" action="/Poultry/ListBreeds?Length=7">
<div id="results">
->THIS AREA IS GETTING REPLACED WITH THE ENTIRE FORM <-
<div id="basic-modal-content">
</div>
</div>
</form>
- 注意 basic-modal-content 现在如何包含自己,另一个 basic-modal-content。结果 div 应该只包含更新结果,而不是整个视图——显然。
我的代码如下:
查看 (BreedSelectorPartial.cshtml)
@model IQueryable<Inert.BreedViewModel>
<script type="text/javascript">
$(document).ready(function () {
$("#breed").keyup(function (e) {
$("input[name=breedSearch]").val($("#breed").val());
$("form#ajaxForm").trigger("submit");
});
});
</script>
<div id="basic-modal-content">
<input id="breed" type="text" style="width:100%; height:22px;" />
<div>
<div style="margin-top: 4px;">
<label for="breed">Begin by typing a breed, e.g. <span style="font-style: italic">Wyandotte</span></label>
</div>
</div>
@using (Ajax.BeginForm("ListBreeds", "Poultry", new AjaxOptions {UpdateTargetId = "results" }, new { id = "ajaxForm" }))
{
<input id="breedSearch" name="breedSearch" type="hidden" />
}
<div id="results" style="height: 320px; color: black; margin-top: 12px; font-size: 18px;">
@{
var grid = new WebGrid(Model, ajaxUpdateContainerId: "results");
int c = Model.Count();
}
@grid.GetHtml(tableStyle: "webgrid",
alternatingRowStyle: "webgrid-alternating-row",
rowStyle: "webgrid-row-style",
displayHeader: true)
</div>
</div>
<script type="text/javascript" src="/scripts/jquery.simplemodal.js"></script>
<script type="text/javascript" src="/scripts/basic.js"></script>
控制器 (PoultryController.cs)
[HttpPost]
public ActionResult ListBreeds(string breedSearch)
{
InertDatabaseEntitiesConnection db = new InertDatabaseEntitiesConnection();
var breeds = db.Breeds.Where(q => q.Name.Contains(breedSearch));
var names = breeds.Select(q => new BreedViewModel { Name = q.Name });
return PartialView("BreedSelectorPartial", names);
}
我不确定我在哪里出错了。我花了几个小时试图弄清楚这一点。有什么解决办法吗?
【问题讨论】:
-
它是因为您的视图模型显示模板...您返回的对象与您的主视图模型匹配 @model IQueryable
...所以它直接调用该视图 -
你能显示你
BreedSelectorPartial.cshtml部分的内容吗? -
@DarinDimitrov 上面的标记代码是
BreedSelectorPartial.cshtml视图。我正在尝试做的是让视图调用自己以获取更新的模型——但只用更改替换 results div 中的区域。 -
好的,我以为这是你的主要观点。没有仔细阅读你的问题。现在一切都清楚了。看我的回答。
#resultsdiv 必须在主视图中的部分之外。
标签: c# jquery .net ajax asp.net-mvc-4