首页 > 解决方案 > 使用 TextBoxFor 更改模型字段并将模型传递给控制器

问题描述

我有一个具有视图模型属性的模型:

public class FilterModel
{
    [DisplayName("Start")]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{MM/dd/yyyy HH:mm}")] 
    public DateTime StartDate { get; set; }

    [DisplayName("End")]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{MM/dd/yyyy HH:mm}")]
    public DateTime EndDate { get; set; }

    public bool ShowActive { get; set; }
}

我的视图更新StartDateEndDate模型使用TextBoxFor

@using (Html.BeginForm("ApplyFilter", "Shipment", FormMethod.Post))
{
   <div class="input-group">
      <button type="submit" class="btn btn-default btn-sm" style="margin: 3px">
           <i class="fa fa-check"></i>
      </button>
      @Html.TextBoxFor(m => m.Filter.StartDate,  new { @minlength = "4", @maxlength = "20", @style = "margin: 3px; border: solid 1px #d5d5d5;" })
      @Html.TextBoxFor(m => m.Filter.EndDate, new { @minlength = "4", @maxlength = "20", @style = "margin: 3px; border: solid 1px #d5d5d5;" })
  </div>
}

控制器中的方法ApplyFilter

public ActionResult ApplyFilter(FilterModel filter)
{
   var vm = Load(filter);
   return View("Index", vm);
}

属性StartDateEndDate正确更新,但属性ShowActive始终设置为False。调用方法时,该属性ShowActive不会将其在视图中的当前值传递给控制器ApplyFilter​​。

标签: c#htmlasp.net-mvc

解决方案


您必须将 ShowActive 添加到您的视图中

@using (Html.BeginForm("ApplyFilter", "Shipment", FormMethod.Post))
{
 
@Html.HiddenFor(m => m.ShowActive)
....
}

推荐阅读