我将模型从强部分 View 发布到 Controller ,如下所示:
[AcceptVerbs(HttpVerbs.Post)]
[Authorize]
public string ProcessRequest(Request request)
{
.
.
.
但是,模型到达操作但它不完整,即请求的复杂属性为空。
我将完整的模型从另一个操作发送到 View ,更改属性并发布到 ProcessRequest 操作,该操作接收不完整的内容。
有人知道这里可能出现什么问题吗?
谢谢!
View 声明:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Models.Request>" %>...
属性绑定(bind):
<% using (Ajax.BeginForm("ProcessRequest", Model, new AjaxOptions { HttpMethod = "post" }, new { id = "ajaxForm" }))
{%>
<%= Html.TextArea("ReplyContent", Model.Reply.ReplyContent, new { cols="100"})%><br />...
最佳答案
基本上,MVC 所做的就是获取正在提交的表单的所有输入的值以及来自 URL 的所有参数,创建一个您期望接收的类型的新对象,并为其分配值。
因此,假设表单具有输入“FirstName”、“LastName”和“PhoneNumber”。您的操作中会发生的情况相当于:
Request request = new Request();
request.FirstName = ReceivedValues["FirstName"] // Note that this is pseudocode, I'm making up the name for the "ReceivedValues" dictionary
request.LastName = ReceivedValues["LastName"]
(...)
这就是您在请求对象中得到的内容(显然,模型中不存在的任何收到的值都不会被分配)。
无论您将原始模型发送到 View 时包含什么,一旦它进入浏览器并返回到您的操作(发布表单后),只有收到的那些值会保留(您可以看到哪些值)只需使用 Firebug 检查后操作的内容即可接收该操作)。
因此,任何未从浏览器接收到的内容都是 null。
P.D.注意:我从你的问题中得知你是从 MVC 开始的,如果你实际上知道我所说的一切并且遇到了更复杂的问题,那么抱歉! :P
关于asp.net-mvc - MVC2 将模型付诸行动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4155738/