猿问

@ Html.DropDownList呈现不同的HTML,但不返回但默认

两个相同的@ Html.DropDownList语句正在呈现不同的HTML。第二个工作正常,但是第一个始终返回默认值,无论选择什么。


@Html.DropDownList 语句在以下代码中:


<div class="form-group">

@Html.LabelFor(model => model.UnidadeId, "Unidade", htmlAttributes: new { @class = "control-label col-md-2" })

<div class="col-md-10">

    @Html.DropDownList("UnidadeId", (SelectList)ViewBag.UnddId, htmlAttributes: new { @class = "form-control" })

    @Html.ValidationMessageFor(model => model.UnidadeId, "", new { @class = "text-danger" })

    </div>

</div>


<div class="form-group">

    @Html.LabelFor(model => model.UnidadeConsumoId, "Unidade de Consumo", htmlAttributes: new { @class = "control-label col-md-2" })

    <div class="col-md-10">

        @Html.DropDownList("UnidadeConsumoId", (SelectList)ViewBag.UndConsId, htmlAttributes: new { @class = "form-control" })

        @Html.ValidationMessageFor(model => model.UnidadeConsumoId, "", new { @class = "text-danger" })

    </div>

</div>

以及呈现的HTML:


<div class="form-group">

<label class="control-label col-md-2" for="UnidadeId">Unidade</label>

<div class="col-md-10">

    <select class="form-control" id="UnidadeId" name="UnidadeId">

        <option value="1">cx</option>

        <option value="2">pc</option>

        <option selected="selected" value="3">kg</option>

        <option value="4">mt</option>

        <option value="5">rl</option>

        <option value="6">ml</option>

        <option value="8">na</option>

        <option value="9">hr</option>

        <option value="10">un</option>

        <option value="11">lt</option>

    </select>

    <span class="field-validation-valid text-danger" data-valmsg-for="UnidadeId" data-valmsg-replace="true"></span>

    </div>

</div>

    </select>

        <span class="field-validation-valid text-danger" data-valmsg-for="UnidadeConsumoId" data-valmsg-replace="true"></span>

    </div>

</div>


墨色风雨
浏览 223回答 1
1回答

慕哥6287543

<select>您要渲染的第一个对象@Html.DropDownList("UnidadeId", ... )没有任何data-val-*属性的事实意味着,在该方法之前,您需要为UnidadeId使用HtmlHelper方法生成的属性提供另一个输入(我假设为@Html.HiddenFor(m => m.UnidadeId))@Html.DropDownList()。在内部,生成表单控件的html帮助器调用的GetUnobtrusiveValidationAttributes()方法HtmlHelper。从源代码仅当启用不干扰的客户端验证时才渲染属性,然后仅在我们从未以这种形式对具有此名称的字段进行验证时才渲染属性。另外,如果没有表单上下文,那么我们将无法渲染属性(我们无法将其附加到)。发布表单时,DefaultModelBinder设置将UnidadeId根据请求中第一个匹配的名称/值对(您的隐藏输入)设置your的值,并忽略后续的匹配名称/值对,这说明了为什么要获取的原始值UnidadeId,而不是在下拉列表中选择的值。附带说明一下,在new SelectList()构造函数中设置第4个参数是没有意义的,因为它会被您的DropDownList()方法忽略(它所绑定的属性的值决定了所选择的内容)。
随时随地看视频慕课网APP
我要回答