我添加了一个动态添加的对象,如:
@Html.EditorFor(model => model.Province)
我的模型包含省属性,但视图在开头没有显示对象。我通过.show()方法将其显示出来。
但是,在控制器中,我发现省的值总是为null。如何通过这样的动态添加对象访问它?
添加了: 我的模型看起来像这样:
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 :(得分:1)
您不能在同一表单中使用相同名称的两个输入字段(在您的情况下为Province
)。嗯,实际上你可以,但只有第一个的值将被发送到控制器。因此,如果您保留下拉列表,它将是将始终发送到控制器的下拉列表的选定值。所以基本上你必须做出决定。您可以禁用其中一个字段(通过向其添加disabled="disabled"
属性,可以动态完成)以仅强制发送另一个字段的值。