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

时间:2019-01-16 16:23:35

标签: c# asp.net asp.net-mvc

我试图在我的Razor代码中更改DropDownList时传递模型,但是我的模型信息没有传递给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>

1 个答案:

答案 0 :(得分:4)

默认情况下,它仅查看公共属性,而不查看字段。

  

MVC将尝试按名称将请求数据绑定到操作参数。 MVC将使用参数名称及其公共可设置属性的名称来查找每个参数的值。在上面的示例中,唯一的动作参数名为id,该MVC会将其绑定到路由值中具有相同名称的值。除了路由值之外,MVC还将绑定请求各个部分的数据,并按设置顺序进行绑定。

https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-2.2

public class MyModel
{
    public List<myData> myList = new List<myData>();
    public List<myType> Types = new List<myType>();
    public string SelectedType;
}

我通过将您的模型从顶部更改为底部来使它起作用。

public class MyModel
{
    public List<myData> myList {get;set;}
    public List<myType> Types{get;set;}
    public string SelectedType {get;set;}
}