C# ASP.NET 在下拉列表更改的 post 方法中传递模型

我试图DropDownList在我的 Razor 代码中更改 a 时传递我的模型,但我的模型信息没有传递给 post 方法,即使调用了 post 方法。


在我的剃刀中:


@model Namespace.Models.MyModel


@using (Html.BeginForm("myFunc", "Home", FormMethod.Post, new { myModel = Model }))

{

    @Html.DropDownListFor(m => m.SelectedType, new SelectList(Model.Types, "Id", "Desc", Model.SelectedType), new { @class = "form-control", style = "display: inline;", @onchange = "this.form.submit()" })

}

我的模型:


public class MyModel

{

    public List<myData> myList = new List<myData>();

    public List<myType> Types = new List<myType>();

    public string SelectedType;

}

我的控制器:


[HttpPost]

public ActionResult myFunc(MyModel myModel)

{

    //do stuff

}

如果我在其中放置一个断点,myFunc我可以看到它在我的更改时进入那里,DropDownList但模型信息不会传递给函数。我确定我所缺少的可能是一件小事,但我就是看不到它。


呈现的 HTML 为:


<form action="/Home/myFunc" myModel="Namespace.Models.MyModel" method="post">

   <select class="form-control" id="SelectedType" name="SelectedType" onChange="(this.form).submit()" style="display: inline;">

      <option selected="selected" value="FT">Fault</option>

      <option value="QY">Query</option>

      <option value="RQ">PM Request</option>

   </select>

</form>


LEATH
浏览 87回答 1
1回答

Cats萌萌

默认情况下,它只查看公共属性而不是字段。MVC 将尝试按名称将请求数据绑定到操作参数。MVC 将使用参数名称及其公共可设置属性的名称来查找每个参数的值。在上面的例子中,唯一的 action 参数名为 id,MVC 将它绑定到路由值中的同名值。除了路由值之外,MVC 还会绑定来自请求各个部分的数据,并且它会按照设定的顺序进行绑定。https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-2.2public class MyModel{&nbsp; &nbsp; public List<myData> myList = new List<myData>();&nbsp; &nbsp; public List<myType> Types = new List<myType>();&nbsp; &nbsp; public string SelectedType;}我通过将您的模型从顶部更改为底部来使其工作。public class MyModel{&nbsp; &nbsp; public List<myData> myList {get;set;}&nbsp; &nbsp; public List<myType> Types{get;set;}&nbsp; &nbsp; public string SelectedType {get;set;}}
打开App,查看更多内容
随时随地看视频慕课网APP