我试图通过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()
,
对象引用未设置为对象的实例。
我搜索了错误并找到了几篇文章(1,2)。他们说我需要进行空检查,但是控制器的设置方式,ViewData [&#34; date&#34;]应该永远不会为空,我希望将该逻辑保留在Controller中。
另外,我找到了this,但是他们在Controller中创建了一个模型实例,而不是View。
除了ViewData之外,还有更好的方法来传递此字符串吗?如果没有,我该如何解决这个问题?
答案 0 :(得分:8)
不要ViewPage
实例,您的视图已经从这种类型的隐含性继承。尝试在视图中调用ViewData
属性,以获取示例:
String date = ViewData["Date"].ToString();
当您在controller base class from asp.net mvc中看到,当您返回视图或partialView时,控制器将ViewData属性从控制器传递到View / PartialView结果的ViewData属性。