C# 如何在Razor视图中将选定值(非模型值)用作Post参数?
我把一个模型摆回我的控制器 我希望用户如何从下拉列表中选择国家,因此我将其传递到单独列表中的视图: 控制器获取:C# 如何在Razor视图中将选定值(非模型值)用作Post参数?,c#,asp.net-mvc,razor,viewmodel,C#,Asp.net Mvc,Razor,Viewmodel,我把一个模型摆回我的控制器 我希望用户如何从下拉列表中选择国家,因此我将其传递到单独列表中的视图: 控制器获取: public static List<String> provinces = new List<String>() { "Eastern Cape", "Free State", "Gauteng", "KwaZulu-Natal", "Limpopo", "Mpumalanga", "Northern Cape", "North West", "Wester
public static List<String> provinces = new List<String>() { "Eastern Cape", "Free State", "Gauteng", "KwaZulu-Natal", "Limpopo", "Mpumalanga", "Northern Cape", "North West", "Western Cape" };
public static List<String> countries = new List<String>() { "South Africa" };
public ActionResult Create()
{
ViewBag.Provinces = provinces.Select(x =>
new SelectListItem()
{
Text = x.ToString()
});
ViewBag.Countries = countries.Select(x =>
new SelectListItem()
{
Text = x.ToString()
});
return View();
}
所以我发现了问题所在。但我不知道如何解决它
我需要表单来获取下拉列表的选定值,而不是模型的值
因为当我在POST Controller中接收到视图模型时,普罗旺斯和Country为“Null”
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create([Bind(Include = "NetworkIdentifier,CommonName,RepeaterName,StartCode,Frequency,Area,Province,Country")] RadioNetwork radioNetwork)
{
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务创建([Bind(Include=“NetworkIdentifier,CommonName,RepeaterName,StartCode,Frequency,Area,Province,Country”)]无线网络无线网络)
{
试试看
这将所选省份绑定到您的模型您的模型绑定不正确,因为您使用了错误的方法来呈现DropDownList。表单中的字段根据
名称
属性和DropDownList()绑定到您的模型
方法呈现没有该属性的字段。当您希望表单字段正确绑定到模型时,应始终注意使用以结尾的方法,以便不必担心模型绑定
你在干什么
@Html.DropDownList("Countries",null , htmlAttributes: new { @class = "form-control" })
你应该做什么
@Html.DropDownListFor(model => model.Country, (List<SelectListItem>)ViewBag.Countries, new { @class = "form-control" })
另外,您根本不需要任何绑定功能。作为参考,您根本不需要
[bind]
属性,只需使用Create(RadioNetwork RadioNetwork)
,因为它将获得与[bind]相同的结果
在本例中。它是否仅用于只希望包含特定值的情况?是的,但从外观上看,您包含了类中的所有值。老实说,我从未使用[Bind]
或其对应的[Exclude]
。这只会让事情更难理解和理解。我已经复制了您的建议。但是我在DisplayDropDownFor()上收到一条错误消息,上面说:`Model.RadioNetworks没有适用的方法named'dropdownListFor',Extension方法无法动态调度。`请参阅我对“您应该做什么”的编辑位。还有,你使用的是什么版本的ASP.NET MVC?谢谢,我使用的是MVC 5OMW你真是个天才。非常感谢你,我已经奋斗了几个小时。现在可以工作了:)@Zapnologica下次,检查呈现的HTML。如果未绑定的字段缺少其name属性或具有错误的name属性(应该与模型上要将其映射到的属性相同)这是您的问题。
@Html.DropDownList(m => m.Province, (SelectList)ViewBag.Provinces, ...
@Html.DropDownList("Countries",null , htmlAttributes: new { @class = "form-control" })
@Html.DropDownListFor(model => model.Country, (List<SelectListItem>)ViewBag.Countries, new { @class = "form-control" })
ViewBag.Provinces = provinces.Select(x =>
new SelectListItem()
{
Text = x.ToString(),
Value = x.ToString()
}).ToList();