MVC2将模型发布到行动

时间:2010-11-11 15:00:56

标签: asp.net-mvc

我将模型从强部分视图发布到控制器,如下所示:

[AcceptVerbs(HttpVerbs.Post)]
[Authorize]
public string ProcessRequest(Request request)
{
.
.
.

但是,模型到达操作但它不完整,即请求的复杂属性为空。

我将完整模型从另一个操作发送到视图,更改属性并发布到ProcessRequest操作,该操作接收不完整的内容。

有谁知道这里可能出现什么问题?

谢谢!

视图声明:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Models.Request>" %>...

属性绑定:

<% using (Ajax.BeginForm("ProcessRequest", Model, new AjaxOptions { HttpMethod = "post" }, new { id = "ajaxForm" }))
    {%>

    <%= Html.TextArea("ReplyContent", Model.Reply.ReplyContent, new { cols="100"})%><br />...

2 个答案:

答案 0 :(得分:3)

基本上,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检查您的帖子操作内容即可接收该操作。

因此,未从浏览器收到的任何内容都为空。

Pd积。注意:我从你的问题中得知你是从MVC开始的,如果你真的知道我所说的一切并且有更复杂的问题,对不起! :P

答案 1 :(得分:0)

这是我痛苦的答案:

<%= Html.TextAreaFor(m=>m.Reply.ReplyContent, new { cols = "100" })%>

现在,回复作为请求的属性传递给行动。

经过一番研究,我发现问题在于命名约定,即以下是错误的:

<%= Html.TextArea("ReplyContent", Model.Reply.ReplyContent, new { cols="100"})%>

显然,TextAreaFor负责合格的命名工作,从而使DefaultBinder正常工作。