ViewData未传递给View

Tra*_*ter 3 c# asp.net-mvc razor asp.net-mvc-4

我正在尝试String通过AJAX向控制器发送一个,并在一个将由Controller返回的视图中使用它:

Index.cshtml

<div id="apts"></div>
<script>
    $(document).ready(function(){
        $.post("/Apt",{"Date": "05/29/2015"},function(response){
            $("#apts").html(response);
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

Controller.cs

...
public ActionResult Apt()
{
    String date = DateTime.Today.ToString("MM/dd/yyyy");
    if (!String.IsNullOrEmpty(Request.Form["Date"]))
    {
        date = Request.Form["Date"];
    }
    ViewData["Date"] = date;
    return PartialView("~/Shared/_DisplaySection.cshtml");
}
Run Code Online (Sandbox Code Playgroud)

_DisplaySection.cshtml

@inherits System.Web.Mvc.WebViewPage
@using System.Web.Mvc
@using MySite.Models
@{
    ViewPage VP = new ViewPage();
    // error is here: Object reference not set to an instance of an object.
    String date = VP.ViewData["Date"].ToString();
    MySite.Models.DisplaySection DW = new DisplaySection(date); 
}

@foreach(var a in DW.data)
{
    <div>@a["name"]</div>
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是VP.ViewData["Date"].ToString(),

你调用的对象是空的.

我搜索了错误,并发现一对夫妇的文章(1,2).他们说我需要进行空检查,但是控制器的设置方式,ViewData ["date"]永远不应该为null,我想将该逻辑保留在Controller中.

此外,我发现了这一点,但他们在Controller中创建了一个模型实例,而不是View.

除ViewData之外还有更好的方法来传递此字符串吗?如果没有,我该如何解决这个问题?

Fel*_*ani 8

不要实例ViewPage,你的视图已经从这种类型的隐含性继承.尝试ViewData在您的视图中调用属性,以获取示例:

String date = ViewData["Date"].ToString();
Run Code Online (Sandbox Code Playgroud)

当你在asp.net mvc控制器基类中看到,当你返回一个视图或partialView时,控制器将ViewData属性从控制器传递给View/PartialView结果的ViewData属性.

在此输入图像描述