ViewData未传递给View

时间:2015-05-29 13:12:49

标签: c# asp.net-mvc asp.net-mvc-4 razor

我试图通过AJAX向控制器发送String,并在控制器返回的视图中使用它:

Index.cshtml

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

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");
}

_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>
}

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

  

对象引用未设置为对象的实例。

我搜索了错误并找到了几篇文章(12)。他们说我需要进行空检查,但是控制器的设置方式,ViewData [&#34; date&#34;]应该永远不会为空,我希望将该逻辑保留在Controller中。

另外,我找到了this,但是他们在Controller中创建了一个模型实例,而不是View。

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

1 个答案:

答案 0 :(得分:8)

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

String date = ViewData["Date"].ToString();

当您在controller base class from asp.net mvc中看到,当您返回视图或partialView时,控制器将ViewData属性从控制器传递到View / PartialView结果的ViewData属性。

enter image description here