我在文本字段中使用viewModel,但是模型字段的名称在浏览器viewsource中不是实际的。在浏览器viewsource中,它显示具有viewmodel名称的模型字段名称,例如 name =“ ResetPasswordModel.NewPassword” ,并且字段id也显示为名称,因此我该如何解决。我已添加浏览器viewsource代码和实际代码,请对其进行检查。我希望你能理解我的问题,谢谢。
ViewModel
public class ProductViewModel
{
public User UserDetails { get; set; }
public ResetPasswordModel ResetPasswordModel { get; set; }
}
public class ResetPasswordModel
{
public string CurrentPassword{ get; set; }
public string NewPassword { get; set; }
}
查看
@model ProjectName.Models.ProductViewModel
@using (Html.BeginForm("ActionName", "Controller", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.UserDetails.UserID)
<div class="row">
<div class="col-sm-6">
<div class="form-group">
<label class="control-label">Current Password</label>
@Html.TextBoxFor(model => model.ResetPasswordModel.CurrentPassword, new { @class = "form-control", placeholder = "Current Password" })
@Html.ValidationMessageFor(model => model.ResetPasswordModel.CurrentPassword, "", new { @class = "text-danger" })
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="control-label">New Password</label>
@Html.TextBoxFor(model => model.ResetPasswordModel.NewPassword, new { @class = "form-control", placeholder = "New Password" })
@Html.ValidationMessageFor(model => model.ResetPasswordModel.NewPassword, "", new { @class = "text-danger" })
</div>
</div>
</div>
}
浏览器查看源
您可以看到他们没有正确显示模型字段名称
<div class="col-sm-6">
<div class="form-group">
<label class="control-label">Current Password</label>
<input class="form-control" name="ResetPasswordModel.CurrentPassword" placeholder="Current Password" data-val="true" data-val-required="The Current Password field is required." id="ResetPasswordModel_CurrentPassword" type="text" value="" />
<span class="field-validation-valid text-danger" data-valmsg-for="ResetPasswordModel.CurrentPassword" data-valmsg-replace="true"></span>
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="control-label">New Password</label>
<input class="form-control" name="ResetPasswordModel.NewPassword"
placeholder="New Password" id="ResetPasswordModel_NewPassword" type="text" data-val="true" data-val-maxlength="Maxmimum 40 characters allowed" data-val-maxlength-max="40" data-val-minlength="Minimum 8 characters required for password" data-val-minlength-min="8" data-val-required="The Password field is required" value="" />
<span class="field-validation-valid text-danger" data-valmsg-for="ResetPasswordModel.NewPassword" data-valmsg-replace="true"></span>
</div>
</div>
控制器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ActionName(ResetPasswordModel ResetPass)
{
if (ModelState.IsValid)
{
}
return View();
}
答案 0 :(得分:1)
问题是,在“视图”中,模型为:ProductViewModel
,但在控制器中,您期望的是:ResetPasswordModel
。
这是不对的,请更改控制器以接受:ProductViewModel
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ActionName(ProductViewModel productViewModel)
{
if (ModelState.IsValid)
{
}
return View();
}
在这种情况下,名称为= ResetPasswordModel.NewPassword的输入将正确绑定到您的模型。
或在您的视图中更改模型:
@model ResetPasswordModel
@using (Html.BeginForm("ActionName", "Controller", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.UserDetails.UserID)
<div class="row">
<div class="col-sm-6">
<div class="form-group">
<label class="control-label">Current Password</label>
@Html.TextBoxFor(model => model.CurrentPassword, new { @class = "form-control", placeholder = "Current Password" })
@Html.ValidationMessageFor(model => model.CurrentPassword, "", new { @class = "text-danger" })
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="control-label">New Password</label>
@Html.TextBoxFor(model => model.NewPassword, new { @class = "form-control", placeholder = "New Password" })
@Html.ValidationMessageFor(model => model.NewPassword, "", new { @class = "text-danger" })
</div>
</div>
</div>
}
在这种情况下,输入名称为:NewPassword
答案 1 :(得分:0)
您可以这样设置name属性:
@Html.TextBoxFor(model => model.ResetPasswordModel.NewPassword, new { @class = "form-control", placeholder = "New Password" , Name="NewPassword"})