使用html <select>标签绑定Mvc模型

时间:2016-12-21 11:39:00

标签: html asp.net-mvc asp.net-mvc-5

我有一个下拉列表,这个列表使用ajax调用绑定值 &lt; script type =&#34; text / javascript&#34;&gt; function getCityName(data){     $(&#39;#ddlCity&#39;)空()。     if(data!= 0){         $就({             键入:&#34; POST&#34;,             url:&#34; / Home / GetCityList&#34;,             数据:{&#39; CityId&#39;:数据},             cache:false,             // contentType:&#34; application / json&#34;,             数据类型:&#34; JSON&#34;,             成功:功能(结果){                 var cityData = result.Data;                 var defaultV = new Option(&#34; - Select - &#34;,0,true);                 $(&#39;#ddlCity&#39)附加(defaultV)。                 for(var i = 0; i&lt; cityData.length; i ++){                     var opt = new Option(cityData [i] .CityName,cityData [i] .Id);                     $(&#39;#ddlCity&#39;)追加(OPT)。                 }             }         });     }     其他{         提醒(&#39;选择州&#39;);     } } &lt; div&gt; @ Html.LabelFor(c =&gt; c.CityId)&lt; / div&gt; &lt; div&gt;&lt; select id =&#34; ddlCity&#34;&gt;&lt; / select&gt;&lt; / div&gt; 听说我想在模型类中绑定模型道具CityId如何绑定它...

5 个答案:

答案 0 :(得分:5)

元素需要name属性来匹配model属性。 在select标签的name属性中添加CityId:

<div><select id="ddlCity" name = "CityId"></select></div>

答案 1 :(得分:1)

<select>标记需要添加MVC Name属性, @Html.NameFor(x=>x.Entity Property)并在模型中命名属性绑定值。 下面的HTML代码:

<div><select id="ddlCity" name="@Html.NameFor(c=>c.CityId)"></select></div>

感谢您回答此主题。

答案 2 :(得分:0)

以下是示例 -

<div class="col-sm-6">
                <div class="form-group formMain required">
                    <label asp-for="CountryId" class="col-sm-4 control-label mandatory"></label>
                    <div class="col-sm-8">
                        <select asp-for="CountryId" asp-items="Model.CountryList"></select> 
                        <span asp-validation-for="CountryId" class="text-danger"></span>
                    </div>
               </div>
            </div>

Where&#39; CountryList&#39;正在从ViewModel属性和&#39; CountryId&#39;传递是用于在数据库表中保存值的字段。

答案 3 :(得分:0)

如果您确定要使用JavaScript填充此下拉列表,则需要将模型值传递给JavaScript并测试它是否已被选中。

这样的事情:

var cityId = @Model.CityId;

// ...

        var defaultSelected = cityId == 0;
        var defaultV = new Option("--Select--", 0, defaultSelected);

        // ...

        for (var i = 0; i < cityData.length; i++) {             
            var thisCitySelected = cityData[i].Id == cityId;
            var opt = new Option(cityData[i].CityName, cityData[i].Id, thisCitySelected);
            $('#ddlCity').append(opt);
        }

除此之外,如果你希望绑定在包含表格的总和时起作用,你必须给输入元素一个名字:

<div><select id="ddlCity" name="ddlCity"></select></div>

答案 4 :(得分:0)

这是我将如何做到的:

我会忘记您尝试使用的ajax并使用@Ajax.BeginForm@Html.DropDownListFor

我假设您正在尝试链接用户选择州的选择列表,并填充该州的城市。

首先,你需要你的模型,一个用于主视图,一个用于我们需要的部分:

MainViewModel:

List<CityData> CityDatas;
Int SelectedCity;
List<StateData> StateDatas;
Int SelectedState;

PartialViewModel:

List<CityData> CityDatas;
Int SelectedCity;

接下来,您需要在视图中绑定模型中的数据(我假设您在第一次加载主视图时存在状态数据):

@Ajax.BeginForm("GetCityList", New AjaxOptions() { UpdateTargetId = "CityData", InsertionMode = InsertionMode.Replace, HttpMethod = "Get" })
{
    @Html.DropDownListFor(x => x.SelectedState, new SelectList(Model.StateDatas, "StateId", "State"), new { @class = "form-control", id = "ddlState", onchange = "$(this.form).submit();" })
}
<div id="CityData">
    @Html.Partial("_CityDataPartialView", new PartialViewModel( CityDatas = Model.CityDatas, SelectedCity = Model.SelectedCity))
</div>

注意我在部分视图中如何获得城市的下拉列表,这样我们就可以在控制器中使用带有ActionResult的Ajax更新下拉列表,该控制器返回带有List<CityData>和{的部分视图{1}}作为它的模型:

Int

然后不要忘记创建&#34; _CityDataPartialView&#34;部分视图采用Public ActionResult GetCityList(int SelectedState) { //Get the data for the cities and put it in the model, which is a list of CityData List<CityDatas> Data = Context.From.Database.Or.Wherever.Using.SelectedState; Int selected = 0; // Here you can pre-select a city if you want return ParitalView("_CityDataPartialView", new PartialViewModel( CityDatas = Data, SelectedCity = selected)); } List<CityData>作为模型:

Int

现在,当您选择状态时,它将执行Ajax调用以获取城市并更新包含城市下拉列表的部分视图,并且所有内容都将绑定到模型=&gt;州,选定州,城市,选定城市。

当您第一次为主视图加载模型时,请记得为@model PartialViewModel @Html.DropDownListFor(x => x.SelectedCity, new SelectList(Model.CityDatas, "Id", "CityName"), new { @class = "form-control", id = "ddlCity" }) 发送new List<CityData>(),否则会给您一个错误。

此外,您需要在网络配置中将CityDatas设置为true:

UnobtrusiveJavaScriptEnabled

...并且<appSettings> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> </appSettings> 引用了......或者jquery.unobtrusive-ajax.js内容都不起作用。

这尚未经过测试,但可能需要稍加调整才能正常使用。