Asp.net mvc 验证后丢失表单值

Asp.net mvc 验证后丢失表单值,asp.net-mvc,validation,viewmodel,Asp.net Mvc,Validation,Viewmodel,使用ViewModel进行验证: public class CCvm { [Required(ErrorMessage = "Please enter your Name")] public string cardHolderName { get; set; } } 我的控制器在post上调用任务: public async Task<ActionResult> Pay(FormCollection form, CCvm model) { if (!Mode

使用ViewModel进行验证:

public class CCvm
{
    [Required(ErrorMessage = "Please enter your Name")]
    public string cardHolderName { get; set; }
}
我的控制器在post上调用任务:

public async Task<ActionResult> Pay(FormCollection form, CCvm model)
{
    if (!ModelState.IsValid)
    {
        return View(model);
    }
}
公共异步任务支付(FormCollection表单,CCvm模型)
{
如果(!ModelState.IsValid)
{
返回视图(模型);
}
}
以及以下观点:

@model GCwholesale.Models.CCvm
@{
    Layout = "~/Views/Shared/_HomeSubPageLayout.cshtml";
    ViewBag.Title = "Secure Checkout";
}
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
      <div class="Payment">
         <label>Name on Card: </label>
         @Html.EditorFor(model => model.cardHolderName, new { htmlAttributes = new { @placeholder = "Cardholder Name Please", @Value = ViewBag.Name } })<br />
         @Html.ValidationMessageFor(model => model.cardHolderName)
       <button class="submitCheckout">SUBMIT NOW</button>
      </div>
}
@model.Models.CCvm
@{
Layout=“~/Views/Shared/_HomeSubPageLayout.cshtml”;
ViewBag.Title=“安全签出”;
}
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
卡片上的姓名:
@Html.EditorFor(model=>model.cardename,new{htmlAttributes=new{@placeholder=“cardender Name Please”,@Value=ViewBag.Name})
@Html.ValidationMessageFor(model=>model.name) 立即提交 }
但当验证失败时,表单中的数据就会消失

谢谢你看

@Value = ViewBag.Name

您没有设置ViewBag.Name,因此它没有值,并且会导致输入为空。删除该选项,然后让HtmlHelper根据发布模型中的值进行设置。

您不需要在编辑器中设置
@value=ViewBag.Name

@Html.EditorFor(model => model.cardHolderName, 
new { htmlAttributes = new { @placeholder = "Cardholder Name Please" } })
public async Task<ActionResult> Pay(CCvm model){
{
   //...
}
此外,您不需要FormCollection作为参数,因为您已经有了CCvm模型

@Html.EditorFor(model => model.cardHolderName, 
new { htmlAttributes = new { @placeholder = "Cardholder Name Please" } })
public async Task<ActionResult> Pay(CCvm model){
{
   //...
}
公共异步任务支付(CCvm模型){
{
//...
}

如果您可以将视图代码添加到问题中,这会有所帮助。我添加了视图代码…..在与html帮助程序绑定时,切勿尝试覆盖
属性。