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">
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
,如果你只是想渲染值?