回发到控制器动作时,来自控制器的ASP ViewModel(Model not model => model.FieldName)变为null

时间:2014-05-10 09:06:43

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

我有一个带强类型模型的mvc aspx页面,它看起来像这样

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<DeliveryService.ViewModels.DeliveryRequestViewModel>" %>

所以当我调用create函数时,页面会显示视图模型中的初始化数据

但是当我提交表单(调用回发创建函数)

我遇到了一个类似于行的空异常错误:

<%: Html.DropDownListFor(model => model.FromGroup, Model.LocationList) %>

错误指向Model.LocationList

我在aspx页面中有另一个字段,但它没有触发null异常,代码看起来像这样

<%: Html.EditorFor(model => model.Address) %>

请指出我的错误,为什么当我在第一个字母处使用带有大写字母的模型时,我得到一个空的异常错误。非常感谢你

我有一个额外的问题:

<%: Html.EditorFor(model => model.DeliveryRequestNumber, new {@readonly = "readonly"}) %>

使用editorfor创建只读文本框的正确语法是什么?试过这个,但渲染的HTML代码是

<input class="text-box single-line valid" id="DeliveryRequestNumber" name="DeliveryRequestNumber" type="text" value="somevaluegeneratedfrommodel">

1 个答案:

答案 0 :(得分:0)

1为什么我会获得NRE?

我在猜测,但你提到的是“回复”&#39;可能意味着你来自WebForms背景。在MVC中,即使在POST之后,控制器动作也必须始终返回呈现视图所需的FULL状态(例如在ViewModel中):

[HttpPost]
ActionResult Create(DeliveryRequestViewModel someModel)
{
   //  Do something
   return View("SomeView", someModel); <-- Remember to pass the ViewModel again
}

2 Re:模型与模型

  

请指出我的错误,为什么当我在第一个字母处使用带有大写字母的模型时,我得到一个空的异常错误。非常感谢你

Model是页面模型类型的实例 - 在这种情况下为DeliveryRequestViewModel。 (来自.aspx的Inherits="ViewPage<DeliveryRequestViewModel>或剃刀中的@model

在这种情况下:

<%: Html.EditorFor(model => model.Address) %>

model是lambda表达式的占位符变量,它将Address属性从变量中调出。占位符,因为它可以是任何东西,例如

Html.EditorFor(foo => foo.Address)

3 Re:只读文本框

This here has some ideas

另外,如果您只想渲染值,我猜您可以使用Html.DisplayFor