我一直在研究几个小时以寻求解决方案,没有其他SO条目或其他来源的条目似乎已经解决了这个具体问题。所呈现的是实际代码的极小缩减版本,但它完全证明了这个问题,如果可以纠正这个问题,那么更大的代码也将被修复。问题是:
MVC4
Home控制器上的索引页面,一个HttpPost操作和一个HttpGet操作
简单模型称为PassModel,一个属性称为A(字符串)
@foreach循环中单个字段的Html DisplayFor
可以单击调用jQuery函数的HTML项目
在加载时,页面显示字母" A"和输入元素。 " A"加载到视图模型中的单个字段中。
单击input元素,调用jQuery函数。
它提交了一个ajax POST,它使用适当的数据(" C")正确调用Index操作,然后将其加载回视图模型实例。
Debug walk显示模型已完全更改为jQuery传递的值" C",并且更改的模型具有值" C"进入视图
当返回View(模型)时,旧的值为" A"仍然显示,新插入的模型值将被忽略(" C")
为改变后的模型内容提供的结构是否可以在第二遍中显示到视图中?我在网上尝试过很多与我遇到的有些相似的建议,更改了post to get,转而使用$ .get和$ .post(使用适当的注释更改),Model.State.Clear(),一切都无济于事。
感谢任何建议......所涉及的整个代码如下所示
代码:
public class HomeController : Controller {
[HttpPost]
public ActionResult Index(string id) {
IList<PassModel> b = new List<PassModel>();
PassModel x = new PassModel();
x.A = id;
b.Add(x);
return View("Index", b);
}
public ActionResult Index() {
var x = new PassModel();
x.A = "A";
IList<PassModel> a = new List<PassModel>();
a.Add(x);
return View("Index",a);
}
}
function fill(object) {
$.ajax({
url: '/Home/Index',
type: 'POST',
cache: false,
data: { id: "C" },
})
}
@model IList<PassModel>
<table>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.A)
</td>
<td>
<input value="Input" onclick="fill(this)"/>
</td>
</tr>
}
</table>
<script src="~/Scripts/jquery-1.10.2.js"></script>
<script src="~/Scripts/JavaScript1.js"></script>
public class PassModel {
public string A { get; set; }
}