我目前在我的 ASP MVC3 视图上使用 Ajax 调用来将新列表项附加到页面。该视图进行 Ajax 调用,该调用调用一个控制器ViewResult
操作,该操作返回部分视图。然后将 Ajax 设置为调用源自调用.append(html)
的元素上的方法。<div>
问题是,不是附加新行,而是整个视图消失,只显示部分视图。
这是视图中的代码。此视图使用具有单独模型的列表对象的视图模型。这部分代码调用局部视图来显示列表对象中的每个项目。
@model Monet.ViewModel.BankListViewModel
@using (Html.BeginForm())
{
<fieldset>
<legend>Stat(s) Fixed</legend>
<table>
<th>State Code</th>
<th>Agent ID</th>
<th></th>
<div class="fixedRows">
@foreach(var item in Model.Fixed)
{
if (!String.IsNullOrWhiteSpace(item.AgentId))
{
@Html.Partial("FixedPartialView", item)
}
}
</div>
</table>
<br />
@Html.ActionLink("Add another", "BlankFixedRow", null, new { id = "addFixed"})
</fieldset>
}
这是addFixed
Ajax 调用
$("#addFixed").click(function () {
$.ajax({
url: this.href,
cache: false,
success: function (html) { $("#fixedRows").append(html); }
});
return false;
});
这是ViewResult
Ajax 调用的控制器操作
public ViewResult BlankFixedRow()
{
SelectList tmpList = new SelectList(new[] { "AL", "AK", "AS", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NA", "NM", "NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "US", "VT", "VI", "VA", "WA", "WV", "WI", "WY" });
ViewBag.StateCodeList = tmpList;
return View("FixedPartialView", new BankListAgentId());
}
最后,这是部分观点。
@model Monet.Models.BankListAgentId
@using (Html.BeginCollectionItem("Fixed"))
{
<tr id="item-@Model.AgentId">
<td>
@Html.DropDownListFor(model => model.StateCode,
(SelectList)ViewBag.StateCodeList, Model.StateCode)
</td>
<td>
@Html.EditorFor(model => model.AgentId)
@Html.ValidationMessageFor(model => model.AgentId)
</td>
<td>
<a href="#" onclick="$('#item-@Model.AgentId').parent().remove();" style="float:right;">Delete</a></td>
</tr>
}
选择Add another
链接后,页面看起来像这样
对此
根据下面的评论,这里是页面的 HTML:
<input type="hidden" name="Fixed.index" autocomplete="off" value="6dd1b028-14f7-4400-95d1-a803c2521b68" />
<tr id="item-">
<td>
<select id="Fixed_6dd1b028-14f7-4400-95d1-a803c2521b68__StateCode" name="Fixed[6dd1b028-14f7-4400-95d1-a803c2521b68].StateCode"><option>AL</option>
<option>AK</option>
<option>AS</option>
<option>AZ</option>
.
.
. <-removed list of all 50 states for clarity
</select>
</td>
<td>
<input class="text-box single-line" id="Fixed_6dd1b028-14f7-4400-95d1-a803c2521b68__AgentId" name="Fixed[6dd1b028-14f7-4400-95d1-a803c2521b68].AgentId" type="text" value="" />
</td>
<td>
<a href="#" class="deleteRow">delete</a>
</td>
</tr>
</section>
编辑
阅读下面的评论后,我将 table 标记更改为<table id="fixedRows">
,但是,这返回了相同的结果。然后我更改了success
Ajax 调用的属性以包含一些基本的 HTML,如下所示
success: function (html) { $("#fixedRows").append("<tr><td>New</td></tr>"); }
但同样,得到了相同的结果。在 Visual Studio 和 Chrome 的调试器中设置断点后,我可以看到 Ajax 从未被调用。相反,会调用控制器操作,并且部分视图会自行加载,而不是附加到<table id="fixedRows">
.
但是,如果有人有任何想法,仍在努力解决这个问题。谢谢!