簡體   English   中英

html.hiddenfor禁用了具有默認值MVC的下拉列表

[英]html.hiddenfor for disabled dropdownlist with default value MVC

我已經編輯了de Create視圖,以添加一個隱藏的字段控件,但是我無法獲取該值

<div class="form-group">
   @Html.LabelFor(model => model.EmpresaId, "Empresa", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("EmpresaId", null, htmlAttributes: new { @class = "form-control", @disabled = "disabled" })
            @Html.HiddenFor(model => model.EmpresaId)
            @Html.ValidationMessageFor(model => model.EmpresaId, "", new { @class = "text-danger" })
        </div>
</div>

創建的html是:

    <div class="form-group">
        <label class="control-label col-md-2" for="EmpresaId">Empresa</label>
        <div class="col-md-10">
            <select class="form-control" disabled="disabled" id="EmpresaId" name="EmpresaId">
              <option selected="selected" value="1">Farmacia MZ</option>
              <option value="2">Credesa</option>
            </select>
            <input length="19" id="EmpresaId" name="EmpresaId" type="hidden" value="">
            <span class="field-validation-valid text-danger" data-valmsg-for="EmpresaId" data-valmsg-replace="true"></span>
        </div>
    </div>

如您所見,隱藏的輸入沒有任何價值。

在Controller上設置了DropDownList默認值:

public ActionResult Create()
    {
        ApplicationUser usr = db.Users.Find(User.Identity.GetUserId().ToString());
        int userId = (int)usr.EmpresaId;
        ViewBag.CategoriaId = new SelectList(db.Categorias, "CategoriaId", "Nombre");
        ViewBag.EmpresaId = new SelectList(db.Empresas, "EmpresaId", "Nombre", userId); <-- defalut value for disabled DropDownList
        ViewBag.MarcaId = new SelectList(db.Marcas, "MarcaId", "Nombre");
        return View();
    }

我已經搜索了很多,但是我不明白這是什么錯誤。 幫助很好!

HiddenFor幫助程序顯然HiddenForEmpresaId viewmodel屬性:

@Html.HiddenFor(model => model.EmpresaId)

隱藏字段值具有空值,因為它沒有從GET操作方法中的相應viewmodel屬性分配,因為實際上是將EmpresaId默認值分配給包含SelectList ViewBag.EmpresaId

ViewBag.EmpresaId = new SelectList(db.Empresas, "EmpresaId", "Nombre", userId);

因此,您需要創建一個viewmodel實例,然后將默認值分配給viewmodel屬性並返回到GET操作方法中的視圖:

// create new instance of viewmodel and set default property value
var model = new ViewModel();
model.EmpresaId = userId;

// return default values from viewmodel to view page
return View(model);

或者只是在創建視圖模型實例時設置默認值:

var model = new ViewModel()
{
    EmpresaId = userId;
};

return View(model);

附帶說明一下,請始終使用強類型的DropDownListFor輔助方法代替DropDownList來綁定viewmodel屬性:

@Html.DropDownListFor(m => m.EmpresaId, ViewBag.EmpresaList as SelectList, new { @class = "form-control", @disabled = "disabled" })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM