我有一个简单的控制器并查看:
我只想在Index.cshtml视图页面上重新加载新数据.我已经彻底调试了代码.实际上,当控件转到Index(string value)方法时,单击“ ul”,将向模型对象填充新数据,即使在cshtml页面中,模型也会在调试器中显示新列表,但视图不是变得清新.我真的不知道为什么.有人可以帮助我吗?
如果我在某个地方犯了可怕的错误,请原谅我的无知,因为我是MVC的新手.
提前致谢…
控制器:
namespace MVCTestApp1.Controllers
{
public class TestController : Controller
{
//
// GET: /Test/
public ActionResult Index()
{
ModelState.Clear();
List<string> ll = new List<string>();
ll.Add("qq");
ll.Add("aa");
ll.Add("zz");
return View(ll);
}
[HttpPost]
public ActionResult Index(string value)
{
ModelState.Clear();
List<string> ll = new List<string>();
ll.Add("kkk");
ll.Add("qq");
ll.Add("aa");
ll.Add("zz");
return View(ll);
}
}
}
View:
@model IEnumerable<string>
@{
ViewBag.Title = "Index";
}
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<h2>Index</h2>
<ul id="bb">
@foreach (var i in Model)
{
<li>@Html.DisplayFor(ir=>i)</li>
}
</ul>
}
解决方法:
我想您编写了一些JavaScript代码,以便当用户点击< li> < ul>的元素您正在触发对[HttpPost]操作的AJAX调用,将选择的值发送到服务器.代码的问题可能是您可能忘记了使用成功回调中的新内容来更新DOM.因此,要使其正常工作,您可以先放置< ul>部分视图中的内容:
List.cshtml:
@model IEnumerable<string>
@foreach (var i in Model)
{
<li>@Html.DisplayFor(ir=>i)</li>
}
然后将此部分内容包含在主视图中:
@model IEnumerable<string>
@{
ViewBag.Title = "Index";
}
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<h2>Index</h2>
<ul id="bb">
@Html.Partial("_List", Model)
</ul>
}
OK,现在在您的POST动作中,您可以返回部分内容:
[HttpPost]
public ActionResult Index(string value)
{
List<string> ll = new List<string>();
ll.Add("kkk");
ll.Add("qq");
ll.Add("aa");
ll.Add("zz");
return PartialView("_List", ll);
}
最后一点是javascript代码:
$(function() {
$('#bb').on('click', 'li', function() {
var value = $(this).html();
$.ajax({
url: $(this).closest('form').attr('action'),
type: 'POST',
data: { value: value },
success: function(partialView) {
$('#bb').html(partialView);
}
});
});
});