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

时间:2014-11-10 13:31:24

标签: 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> CodeList { get; set; }
}

在我的模拟课程中,我正在创建模拟数据,如下所示:

public static EditPaymentMethod GetPaymentMethodDetails(int tenantID)
 {
    for (int i = 0; i < obj.MyProperty.BPay.Count; i++)
      {
        obj.BillerCodes.Add(new BillerCode { CodeList = new List<string> { "AAA" + i, "BBB" + i } });
      }

     return obj;
}

在视图中:

@using (Html.BeginForm("EditPaymentMethod","PaymentMethod",FormMethod.Post))
{
    @for (int i = 0; i < Model.MyProperty.BPay.Count; i++)
    {
    <div class="list_scbill">
         @Html.Label("Biller Codes")
    </div>
    <div style="display: block; margin-left: 87px;">
         @Html.DropDownListFor(model => model.BillerCodes[i].CodeList, new SelectList(Model.BillerCodes[i].CodeList))
    </div>
    }
    <div id="BtnsDiv">
        <button id="btn_SaveChanges" type="submit">
           Save
        </button>
        <button id="btn_Cancel" type="button">
           Cancel
        </button>
    </div>
}

在控制器中:

public ActionResult EditPaymentMethod(EditPaymentMethod model)
{
    if (ModelState.IsValid)
    {
        //CODE TO SAVE DATA THROUGH THE SERVICE  
    }

    return View(model);
}

当我尝试提交表单时,EditPaymentMethod将BillerCodes的模型设为null。

知道我哪里出错了?

提前致谢。

3 个答案:

答案 0 :(得分:0)

立即结束一些事情,在路线值字典中,您实际上没有将模型传递给控制器​​。

@using (Html.BeginForm("EditPaymentMethod","PaymentMethod",new {model = Model}, FormMethod.Post))

会将您的模型作为参数添加到您的帖子中。此外,您的控制器当前是一个获取请求,您需要将其标记为帖子,否则控制器将默认尝试从URL而不是请求体获取序列化字符串。

[HttpPost]
public ActionResult EditPaymentMethod(EditPaymentMethod model)

答案 1 :(得分:0)

使用ListBoxFor进行多选,而不是DropDownListFor,这只会产生一个单一选择,其发布值不适合模型绑定器绑定到列表。

答案 2 :(得分:0)

同样,您必须在模型中创建列表变量 在视图页面上你必须

@Html.ListBoxFor(model => model.SelectedList, new SelectList(Model.SelectList, "Id", "Name"), new { @class = "js-example-basic-multiple form-control", @multiple = "multiple", @id = "SelectListId" })

var ListModel = {
                    "Id": 0,
                    "SelectedList": $("#SelectedListId").val(),
                };
$.ajax({
                     url: '/Test/Test/',
                     type: "Post",
                     async: false,
                     dataType: "html",
                     data: JSON.stringify(ListModel),
                     contentType: "application/json;charset=utf-8",
                     success: function (result) {
                        
                     }
                 });

模型应该是:

public class EditPaymentMethod
    {
        public List<string> BPay { get; set; }
        public List<BillerCode> BillerCodes { get; set; }
        public int[] SelectedList{ get; set; }
        
    }