0

我添加了一个动态添加的对象,例如:

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

我的模型包含省属性,但视图在开始时没有显示对象。我通过 .show() 方法使其可见。

但是,在控制器中,我发现 Province 的值始终为 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>

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

4

1 回答 1

1

您不能在具有相同名称的相同表单中拥有 2 个输入字段(Province在您的情况下)。好吧,实际上你可以但只有第一个的值会被发送到控制器。因此,如果您保留下拉列表,它将是下拉列表的选定值,该值将始终发送到控制器。所以基本上你必须决定。您可以禁用其中一个字段(通过向其中添加disabled="disabled"属性,可以动态完成)以仅强制发送另一个字段的值。

于 2012-07-25T15:48:28.503 回答