Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Razor视图中将选定值(非模型值)用作Post参数?_C#_Asp.net Mvc_Razor_Viewmodel - Fatal编程技术网

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();