部分视图返回带有空字段的模型

时间:2012-10-03 20:09:12

标签: asp.net-mvc-3 visual-studio-2010 parameter-passing

在使用ASP.NET MVC 3的Web应用程序中,我从控制器传递一个带有初始化属性作为参数的模型到局部视图。

视图显示一个带有单个文本框的对话框,并在启动时启动控制器中的操作(该操作采用与参数相同的模型类型)。
问题在于,此时只有相对于文本框字段的属性具有一个值,即用户插入的值,而其他所有值都为空,即使在视图中它们具有适当的值。

如果点击提交按钮后,如何将视图中的属性保留到控制器?

编辑(添加代码):

 //----------   This method in the controller call the Partial View and pass the model  --------
[HttpPost]
public PartialViewResult GetAddCustomFormerClubDialog()
    {
        var order = GetCurrentOrder();
        //Order has here all properties initialized

        var dialogModel = new dialogModel<Order> { Entity = order, ControllerAddEntityActionName = "SelectOrder"};

        return PartialView("Dialogs/AddOrder", dialogModel);
    }



//-----------------   Here the Partial View   -----------------------------------
@model FifaTMS.TMS.Presentation.Model.Wizard.WizardDialogModel<Club>

<div>
@using (Ajax.BeginForm(Model.ControllerAddEntityActionName, "Orders", new AjaxOptions { HttpMethod = "POST"}))
{
    @Html.LabelFor(a => a.Entity.Name)
    @Html.TextBoxFor(a => a.Entity.Name, new { @class = "isrequired", style="width: 250px;" })
 }
</div>



//--------  Here the method from the view (in the same controller as the first code portion)  -----
 [HttpPost]
 public JsonResult SelectOrder(dialogModel<Order> OrderModel)
    {
       var order= OrderModel.Entity;
      // But order has only the property Name set (in the view)

     ...
    }

1 个答案:

答案 0 :(得分:1)

我能够通过为每个所需属性添加隐藏字段来解决问题,例如:

@Html.HiddenFor(p => p.Entity.OrderId, new { id = "OrderId" })

这是因为从PartialView创建了一个新的Model实例并将其发送到控制器。因此,只采用表单中设置的属性(在我的情况下,唯一的字段是与PartialView中的TextBox相关的OrderName)。