获取部分视图以加载数据

时间:2014-08-01 15:31:33

标签: c# asp.net-mvc model controller

我有一个控制器帖子(索引POST),它返回一个局部视图(模态)。此部分视图是从其各自的Get ActionResult方法返回的模型加载数据。它忽略了这种方法。有没有办法让它从控制器加载数据?

    [HttpGet]
    public ActionResult Index()
    {

        return View();

    }

    [HttpPost]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public ActionResult Index(string date)
    {
        string[] dateSplit = date.Split(new char[] { 'T' });

        DateTime objDate = Convert.ToDateTime(dateSplit[0]);
        TempData["date"] = objDate;

        return PartialView("~/Views/Home/Modal.cshtml");
    }

这是部分View的Get方法,当Index post返回局部视图时,它不会加载。

[HttpGet]
public ActionResult Modal()
{
    var content = db.Calendars.ToList();
    if(TempData["date"] != null)
    {
        DateTime objDate = Convert.ToDateTime(TempData["date"]); 
        var contentDate = db.Calendars.Where(x => x.startDate == objDate).ToList();

        return PartialView(contentDate);
    }


    return PartialView(content);



}

以下是视图:

@model IEnumerable<webby.Models.Calendar>



<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" style="padding:20.5% 15%;">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
                <h4 class="modal-title" id="myModalLabel">Events on @ViewBag.Date</h4>
            </div>
            <div class="modal-body">
                <table>
                    @foreach(var item in Model)
                    { 
                    <tr>
                        <td>
                            @Html.DisplayFor(model => item.events)
                        </td>
                    </tr>
                    <tr>
                        <td>
                            @Html.DisplayFor(model => item.type)
                        </td>
                    </tr>
                    <tr>
                        <td>
                            @Html.DisplayFor(model => item.content)
                        </td>
                    </tr>
                    }


                </table>


            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                <button type="button" class="btn btn-primary">Save changes</button>
            </div>
        </div>
    </div>
</div>

<script>
    $('#myModal').modal();
</script>

运行应用程序后,一旦帖子返回局部视图,部分视图就会捕获一个空错误。

2 个答案:

答案 0 :(得分:0)

返回PartialView(&#34;〜/ Views / Home / Modal.cshtml&#34;);

以上行不会调用你的Modal()动作。它只会尝试返回View(cshtml)。 (在这种情况下,你不会给视图一个模型。)

您可以通过索引(帖子)的最后一行来实现目标:

return RedirectToAction("Modal");

(也就是说,我对你正在努力完成的事情有点不清楚,所以更详细的描述可能有助于找到一个完整的解决方案。)

另外,我并不确切知道ScriptMethod属性是什么,但我很确定你不想让它装饰你的帖子。

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]

答案 1 :(得分:0)

你不能有模态动作。当你打电话

return PartialView("~/Views/Home/Modal.cshtml");

它将简单地打开视图,无论你传递给它的是什么(写的绝对没有)。

您要做的是放置代码:

var content = db.Calendars.ToList();
if(TempData["date"] != null)
{
    DateTime objDate = Convert.ToDateTime(TempData["date"]); 
    content = db.Calendars.Where(x => x.startDate == objDate).ToList();
}

在你的HttpPost Index动作中,并将模型传递给模态:

return PartialView("~/Views/Home/Modal.cshtml", content);