ASP ViewModel从控制器(模型不是模型=>model.FieldName)在回发到控制器动作时变为空

本文关键字:控制器 模型 FieldName ViewModel ASP model | 更新日期: 2023-09-27 18:02:35

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

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

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

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

我得到了一个空异常错误,就像在那行:

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

错误指向模型。LocationList

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

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

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

我还有一个问题:

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

使用编辑器创建只读文本框的正确语法是什么?尝试了这个,但是,呈现的HTML代码是

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

ASP ViewModel从控制器(模型不是模型=>model.FieldName)在回发到控制器动作时变为空

1为什么我得到一个NRE?

我猜,但是你提到的"PostBack"可能意味着你来自WebForms背景。在MVC中,控制器动作必须总是返回渲染视图所需的FULL状态(例如在ViewModel中),即使在POST:

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

2 Re: Model vs Model

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

Model是页面模型类型的一个实例——在本例中是DeliveryRequestViewModel。(源自.aspx的Inherits="ViewPage<DeliveryRequestViewModel>,或源自razor中的@model)

而在本例中:

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

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

Html.EditorFor(foo => foo.Address)

3 Re:Readonly Text Box

这里有一些想法

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