答案 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
内容都不起作用。
这尚未经过测试,但可能需要稍加调整才能正常使用。