【问题标题】:Losing form values after validation验证后丢失表单值
【发布时间】:2015-07-23 18:30:15
【问题描述】:

使用 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);
    }
}

还有观点:

@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>
}

但是当验证失败时,表单中的数据就会消失。

感谢观看。

【问题讨论】:

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

标签: asp.net-mvc validation viewmodel


【解决方案1】:

您不需要在 EditorFor 中设置@Value = ViewBag.Name

@Html.EditorFor(model => model.cardHolderName, 
new { htmlAttributes = new { @placeholder = "Cardholder Name Please" } })

此外,您不需要 FormCollection 作为参数,因为您已经拥有 CCvm 模型

public async Task<ActionResult> Pay(CCvm model){
{
   //...
}

【讨论】:

    【解决方案2】:
    @Value = ViewBag.Name
    

    您没有设置 ViewBag.Name,因此它没有值并且会导致输入空白。删除它并让 HtmlHelper 根据发布的模型中的值设置它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多