ASP.Net MVC checkbox values from view to custom controller method

后端 未结 2 1498
失恋的感觉
失恋的感觉 2021-01-24 16:20

I have a view with a table that displays my model items. I\'ve extracted the relevant portions of my view:

@model System.Collections.Generic.IEnumerable

        
相关标签:
2条回答
  • 2021-01-24 16:33

    You cannot use a foreach loop to generate form controls for properties in a collection. It creates duplicate name attributes (in your case name="item.IncludeProvision") which have no relationship to your model and duplicate id attributes which is invalid html. Use either a for loop (you models needs to be IList<Provision>

    for(int i = 0; i < Model.Count; i++)
    {
      <tr>
        <td>....</td>
        <td>@Html.CheckBoxFor(m => m[i].IncludeProvision)<td>
      </tr>
    }
    

    or create an EditorTemplate for typeof Provision. In /Views/Shared/EditorTemplates/Provision.cshtml (note the name of the template must match the name of the type)

    @model Provision
    <tr>
      <td>....</td>
      <td>@Html.CheckBoxFor(m => m.IncludeProvision)<td>
    </tr>
    

    and in the main view (the model can be IEnumerable<Provision>)

    <table>
      @Html.EditorFor(m => m)
    </table>
    
    0 讨论(0)
  • 2021-01-24 16:35

    As @mattytommo said in comments, you should post your model to controller. It can be done with putting your checkbox inside a form. After clicking on button "Save and exit" all data from inputs inside this form will be serialized and sent to your controller where you can perform manipulations with session variables and so on. After that you can redirect wherever you like.

    Model

    public class YourModel
    {
        ...
        public bool IncludeProvision { get; set; }
        ...
    }
    

    View

    @model YourModel
    
    ...
    @using (Html.BeginForm("SaveAndSend", "Test", FormMethod.Post))
    {
        ...
        @Html.CheckBoxFor(model => model.IncludeProvision)
        ...
        <button type="submit">Save and send</button>
    }
    ...
    

    Controller

    public class TestController : Controller
    {
        ...
        [HttpPost]
        public ActionResult SaveAndSend(YourModel model)
        {
             if (ModelState.IsValid)
             {
                 // Some magic with your data
                 return RedirectToAction(...);
             }
    
             return View(model); // As an example
        }
        ...
    }
    
    0 讨论(0)
提交回复
热议问题