渲染部分视图代码骨架

时间:2011-11-29 01:16:29

标签: c# ajax asp.net-mvc-3 razor

我无法使用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文件,但我无法呈现视图。另外,如果我想让视图异步渲染,我的方法是否正确?

感谢您的帮助!

1 个答案:

答案 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:来处理请求错误的时间。有关successerror的详细信息,请参阅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);
}