2012-07-24 52 views
0

我加了一个动态添加的对象,如:控制器得到动态添加对象空视图

@Html.EditorFor(model => model.Province) 

我的模型包含了省性质,但认为并没有显示在开始时的对象。我通过.show()方法使它可见。

但是,在控制器中,我总是发现省的值为空。如何使它可以像这样动态添加对象?

补充: 我的模型是这样的:

public class Location 
{ 
    [Required] 
    public int ID { get; set; } 
    [Required] 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public string Street { get; set; } 
    public string City { get; set; } 
    [Display(Name = "State/Province")] 
    public string Province { get; set; } 
} 

控制器:

[HttpPost] 
    public ActionResult Create(Location location) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Location.Add(location); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
    } 

观点:

<div class="editor-label"> 
     @Html.LabelFor(model => model.Province) 
    </div> 
    <div class="editor-field"> 
    <div id="province_ddl"> 
     @Html.DropDownListFor(
      x => x.Province, 
      Enumerable.Empty<SelectListItem>(), 
      "-- Select State/Province --" 
      ) 
    </div> 
    <div id="province_tb" style="display: none"> 
     @Html.EditorFor(model => model.Province) 
    </div> 
     @Html.ValidationMessageFor(model => model.Province) 
    </div> 

当我使用下拉列表,它将对省权值属性。但是,如果我使文本框控件可见,它将不具有值,即在控制器中获得空值。

+0

你是否得到每个省属性的相应输入字段?你的模型是怎样的?你的控制器动作是怎样的?他们以什么样的对象作为论点?这种情况下*动态*是什么?你需要提供更多信息。 – 2012-07-25 12:34:21

回答

1

您不能在同一表单中使用相同名称的2个输入字段(在您的情况下为Province)。那么,实际上你可以,但只有第一个的价值将被发送到控制器。所以如果你保持下拉菜单,它将是总是发送给控制器的下拉菜单的选定值。所以基本上你必须做出决定。您可以禁用其中一个字段(通过向其添加disabled="disabled"属性,可以动态完成)来强制仅发送另一个字段的值。

+0

谢谢,但有没有解决方法?我想如果我能隐藏这个对象,它就会起作用。如果Razor引擎识别出隐藏的下拉列表,那么如何为ddl列表中最初不包含的addtional项目输入字段? – San 2012-07-25 15:54:40

+0

这与Razor或ASp.NET MVC无关。这是纯粹的HTML。在同一表单中不能有两个具有相同名称的字段。如果你想这样做,只需禁用其中的一个(通过添加“disabled =”disabled“属性给它),因此只发送其他字段的值。添加CSS“display:none”对标记完全没有影响。这只是视觉效果。你可以使用一个隐藏的字段,效果完全相同,而不是试图用CSS隐藏字段。 – 2012-07-25 16:02:45

+0

非常感谢!我想我必须尝试隐藏领域的方式。 – San 2012-07-25 16:23:16

相关问题