我有一个 ViewModel,其中包含一个名为 ContactEvent 的对象的信息。ContactEvent 有一个名为 IsActive 的布尔值。我正在使用@Html.CheckBoxFor()
复选框让用户更改其值。问题是,如果该值最初为 true,而用户将其设置为 false,则通过 POST 传递的模型具有更新后的值。但是,如果该值最初为 false,则通过 POST 传递的模型仍然始终返回 false。我不知道是什么原因造成的。
看法
@model ContactEventViewModel
@{
ViewBag.Title = "Contact Event";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<head>
<script src="~/datatables/js/jquery.dataTables.min.js"></script>
<link rel="stylesheet" href="~/datatables/css/jquery.dataTables.min.css" />
</head>
<body>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
@using (Html.BeginForm("ContactEvent", "ContactEvents", FormMethod.Post))
{
<h1>Edit Contact Event</h1>
@Html.HiddenFor(Model => Model.ContactEvent.ContactEventSysID, new { @Value = Model.ContactEvent.ContactEventSysID })
<div class="form-group row">
<label>Customer</label>
<div class="col-md-7 col-lg-7">
<Label>@String.Format("{1}, {0}", Model.Customer.FirstName, Model.Customer.LastName)</Label>
@Html.HiddenFor(Model => Model.Customer.CustomerSysID, new { @Value = Model.Customer.CustomerSysID })
</div>
</div>
<div class="form-group row">
<label>Date</label>
<div class="col-md-7 col-lg-7">
@Html.EditorFor(model => model.ContactEvent.Date, new { htmlAttributes = new { @class = "datepicker", @Name = "date", @PlaceHolder = "mm/dd/yyyy" } })
</div>
</div>
<div class="form-group row">
<label>Event Type</label>
<div class="col-md-7 col-lg-7">
@Html.DropDownListFor(Model => Model.ContactEvent.ContactEventTypeSysID, new SelectList(Model.ListOfContactEventTypes, "ContactEventTypeSysID", "Description"))
</div>
</div>
<div class="form-group row">
<label>Outcome</label>
<div class="col-md-7 col-lg-7">
@Html.DropDownListFor(Model => Model.ContactEvent.OutcomeSysID, new SelectList(Model.ListOfOutcomes, "OutcomeSysID", "Description"))
</div>
</div>
<div class="form-group row">
<label>Note</label>
<div class="col-md-7 col-lg-7">
@Html.TextBoxFor(Model => Model.ContactEvent.Note, new { @Value = Model.ContactEvent.Note })
</div>
</div>
<div class="form-group row">
<label>Created Date</label>
<div class="col-md-7 col-lg-7">
<label>@Model.ContactEvent.CreatedDate</label>
</div>
</div>
<div class="form-group row">
<label>Last Updated Date</label>
<div class="col-md-7 col-lg-7">
<label>@Model.ContactEvent.LastUpdatedDate</label>
</div>
</div>
<div class="form-group row">
<label>Active?</label>
<div class="col-md-7 col-lg-7">
@Html.CheckBoxFor(Model => Model.ContactEvent.IsActive, new { @Value = Model.ContactEvent.IsActive })
</div>
</div>
<input type="submit" id="updateButton" value="Submit" />
}
</div>
</body>
控制器中的方法
[HttpPost]
public IActionResult ContactEvent(ContactEventViewModel contactEventViewModel)
{
if (ModelState.IsValid)
{
string connectionString = Startup.ConnectionString;
string query = "UPDATE [CRM].[dbo].[ContactEvent] " +
"SET [Date]=@Date, [ContactEventTypeSysID]=@ContactEventTypeSysID, [OutcomeSysID]=@OutcomeSysID, [Note]=@Note, [LastUpdatedDate]=@LastUpdatedDate, [IsActive]=@IsActive " +
"WHERE [ContactEventSysID]=@ContactEventSysID";
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand(query, connection))
{
command.Parameters.AddWithValue("@Date", contactEventViewModel.ContactEvent.Date);
command.Parameters.AddWithValue("@ContactEventTypeSysID", contactEventViewModel.ContactEvent.ContactEventTypeSysID);
command.Parameters.AddWithValue("@OutcomeSysID", contactEventViewModel.ContactEvent.OutcomeSysID);
if (contactEventViewModel.ContactEvent.Note == null)
{
command.Parameters.AddWithValue("@Note", DBNull.Value);
}
else
{
command.Parameters.AddWithValue("@Note", contactEventViewModel.ContactEvent.Note);
}
command.Parameters.AddWithValue("@LastUpdatedDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
command.Parameters.AddWithValue("@IsActive", contactEventViewModel.ContactEvent.IsActive);
command.Parameters.AddWithValue("@ContactEventSysID", contactEventViewModel.ContactEvent.ContactEventSysID);
connection.Open();
command.ExecuteNonQuery();
}
}
}
return RedirectToAction("ContactEvent", "ContactEvents", new { ContactEventSysID = contactEventViewModel.ContactEvent.ContactEventSysID });
}
如果您需要任何其他代码,请告诉我。提前致谢。