我无法使用MVC3剃刀引擎渲染局部视图。
当我选择ToDate
时,jQuery UI datepicker将通过发送JSON字符串作为数据来进行POST。
ControllerView.cshtml:
to_date ({
onSelect: function (selectedDate, inst) {
// Some code here to construct JSON
$.ajax ({
// Appropriate attributes
url: 'Controller',
data: '{ FromDate: "' + data.FromDate + '", ToDate: "' + data.ToDate + '" }'
});
}
});
<div id="picker">
<label for="FromDate">From: </label>
<input type="text" id="FromDate" />
<label for="ToDate">To: </label>
<input type="text" id="ToDate" />
</div> <!-- END picker -->
<div id="Day">
<!-- ****Where partial view should be rendered**** -->
</div>
这将由控制器(Controller.cs)接收:
[HttpPost]
public ActionResult Controller (DatePicker Dates)
{
if (ModelState.IsValid)
{
// Save IList returned from query
IList<Obj> JsonObj = Model.query(Dates);
return PartialView("_PartialView", JsonObj);
}
return View();
}
接下来的步骤应该是什么?我创建了一个_PartialView.cshtml
文件,但我无法呈现视图。另外,如果我想让视图异步渲染,我的方法是否正确?
感谢您的帮助!
答案 0 :(得分:1)
只需添加一个函数即可在ajax调用成功时运行:
to_date ({
onSelect: function (selectedDate, inst) {
// Some code here to construct JSON
$.ajax ({
// Appropriate attributes
url: 'Controller',
data: '{ FromDate: "' + data.FromDate + '",
ToDate: "' + data.ToDate + '" }'
success: function (result) {
// when the AJAX succeeds replace the Day tag with the new view
$('#Day').html(result);
}
});
}
});
您可能还应该通过将函数分配给error:
来处理请求错误的时间。有关success
和error
的详细信息,请参阅jQuery.ajax() documentation。
一些建议 - 我强烈建议您将操作结果调用为Controller之外的其他内容。我不确定你是否会获得此调用的模型状态,因为它是一个AJAX调用,所以你可能想要仔细检查那个部分。我还建议您更改您的操作结果,以便按名称获取这两个值。像这样:
[HttpPost]
public ActionResult RenderDatePartial(Date fromDate, Date toDate)
{
var dates = new List<Date> { fromDate, toDate };
// Save IList returned from query
var jsonObj = Model.query(dates);
return PartialView("_DatePartial", jsonObj);
}