Asp.net mvc 3 试图使用RenderPartial时发生对象引用错误
我有一个使用Asp.net mvc 3 试图使用RenderPartial时发生对象引用错误,asp.net-mvc-3,asp.net-mvc-4,Asp.net Mvc 3,Asp.net Mvc 4,我有一个使用视图模型的主视图。在ViewModel中,我这样做(编辑以显示完整的ViewModel): namespace MyNameSpace.ViewModels { public class MyViewModel { public ModelOne ModelOne { get; set; } public ModelTwo ModelTwo { get; set; } } } @using MyNameSpace.ViewMo
视图模型的主视图
。在ViewModel
中,我这样做(编辑以显示完整的ViewModel
):
namespace MyNameSpace.ViewModels
{
public class MyViewModel
{
public ModelOne ModelOne { get; set; }
public ModelTwo ModelTwo { get; set; }
}
}
@using MyNameSpace.ViewModels
@using MyNameSpace.Models
@model MyViewModel
...
@using (Html.BeginFormAntiForgeryPost())
{
@Html.Hidden("myData", new MvcSerializer()
.Serialize(Model, SerializationMode.Signed))
....
<div>
@{Html.RenderPartial("_MyCheckBox",
Model.ModelTwo, new ViewDataDictionary());}
</div>
}
....
在我的主视图中,我这样做(编辑:添加@Html.Hidden
code):
namespace MyNameSpace.ViewModels
{
public class MyViewModel
{
public ModelOne ModelOne { get; set; }
public ModelTwo ModelTwo { get; set; }
}
}
@using MyNameSpace.ViewModels
@using MyNameSpace.Models
@model MyViewModel
...
@using (Html.BeginFormAntiForgeryPost())
{
@Html.Hidden("myData", new MvcSerializer()
.Serialize(Model, SerializationMode.Signed))
....
<div>
@{Html.RenderPartial("_MyCheckBox",
Model.ModelTwo, new ViewDataDictionary());}
</div>
}
....
这里是ModelTwo.cs中的内容:
MyController.cs
然后在*MyController.cs内的特定操作中:
public ActionResult Step5(string backButton, string nextButton)
{
if (backButton != null)
return RedirectToAction("Step4");
else if ((nextButton != null) && ModelState.IsValid)
return RedirectToAction("Confirm");
else
return View(myData);
}
什么是null,Model还是MyCheckBox?@42老实说,在调试模式下不知道。我以为是模型,我做了ModelTwo-ModelTwo=newmodeltwo()
无效,因此除非这是错误的,否则我必须假设MyCheckBox。我正要回答你的问题,你能发布MyViewModel和MyCheckBox的定义吗?@BishnuPaudel添加了代码。其中一些可能并不相关。我遗漏了[MySelector]
@REMESQ的代码,在渲染主视图之前,您是否在控制器中的ViewModel实例中设置Model2?你能发布你的控制器代码来呈现你的主视图吗?
[Flags]
public enum MyEnum
{
[Display(Name="Name 1")]
Enum1 = 1,
[Display(Name="Name 2")]
Enum2 = 2,
[Display(Name="Name 3")]
Enum3 = 4,
[Display(Name="Name 4")]
Enum4 = 8,
[Display(Name="Name 5")]
Enum5 = 16
}
private MyViewModel myData;
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var serialized = Request.Form["myData"];
if (serialized != null) //Form was posted containing serialized data
{
myData= (MyViewModel)new MvcSerializer().Deserialize
(serialized, SerializationMode.Signed);
TryUpdateModel(myData);
}
else
myData= (MyViewModel)TempData["myData"] ?? new MyViewModel();
TempData.Keep();
}
protected override void OnResultExecuted(ResultExecutedContext filterContext)
{
if (filterContext.Result is RedirectToRouteResult)
TempData["myData"] = myData;
}
public ActionResult Step5(string backButton, string nextButton)
{
if (backButton != null)
return RedirectToAction("Step4");
else if ((nextButton != null) && ModelState.IsValid)
return RedirectToAction("Confirm");
else
return View(myData);
}