Forms 提交表单时将模型发送回控制器

Forms 提交表单时将模型发送回控制器,forms,asp.net-mvc-3,razor,Forms,Asp.net Mvc 3,Razor,我想使用下拉列表创建列表。 我有一个具有以下属性的模型类。 public class EditPaymentMethod { public List<string> BPay { get; set; } public List<BillerCode> BillerCodes { get; set; } } public class BillerCode { public List<string> Code


我想使用下拉列表创建列表。
我有一个具有以下属性的模型类。

public class EditPaymentMethod
    {
        public List<string> BPay { get; set; }
        public List<BillerCode> BillerCodes { get; set; }
    }
public class BillerCode
{
    public List<string> CodeList { get; set; }
}
当我尝试提交表单时,EditPaymentMethod获取BillerCodes为null的模型

知道我哪里出错了吗


提前感谢。

一开始就把事情联系起来,第一,你实际上没有在路由值字典中将模型传递给你的控制器

@using (Html.BeginForm("EditPaymentMethod","PaymentMethod",new {model = Model}, FormMethod.Post))
将您的模型作为参数添加到您的帖子中。另外,您的控制器当前是一个get请求,您需要将其标记为post,否则默认情况下,控制器将尝试从url而不是请求正文获取序列化字符串

[HttpPost]
public ActionResult EditPaymentMethod(EditPaymentMethod model)

对多选使用
ListBoxFor
,而不是
DropDownListFor
,后者只会生成一个单选,其发布值对于modelbinder绑定到列表是不正确的。

同样,您必须在模型中创建列表变量 在查看页面上,您必须


@Html.ListBoxFor(model=>model.SelectedList,new-SelectList(model.SelectList,“Id”,“Name”),new{@class=“js-example-basic-multiple-form-control”,“@multiple=”multiple“,@Id=“SelectListId”})
实际上控制器正在获取模型。
我正在使用下拉菜单,因此,在我选择一个值之前,BillerCodes将变为null。
我可以控制动态地向BillerCodes添加代码。当我提交表单时,账单代码列表将发送给控制器,我不想在列表中选择代码。这是完全错误的。如果模型包含值类型,它最多会创建一个包含模型初始值(非编辑值)的
RouteValueDictionary
,但由于模型包含集合属性,路由值看起来类似于
BPay=“System.collections.Generic[string]”
,回邮时不会将任何内容绑定到模型。我有一个文本框,用户在其中输入账单代码,然后单击按钮,代码将添加到列表中。我不希望用户从列表中选择代码,当表单提交时,代码将在模型中返回。
public ActionResult EditPaymentMethod(EditPaymentMethod model)
{
    if (ModelState.IsValid)
    {
        //CODE TO SAVE DATA THROUGH THE SERVICE  
    }

    return View(model);
}
@using (Html.BeginForm("EditPaymentMethod","PaymentMethod",new {model = Model}, FormMethod.Post))
[HttpPost]
public ActionResult EditPaymentMethod(EditPaymentMethod model)