簡體   English   中英

MVC 5無法正確驗證StringLength屬性

[英]MVC 5 not validating StringLength attribute properly

我正在嘗試驗證PersonPaymentDetails模型中的sortCode字段,但是我的視圖無法驗證StringLength(6)。 如果我提交的表單的值的長度為1,則會錯誤地成功驗證。

我在這里做錯了什么嗎?

/* [CONTROLLER] */
public class PersonController : Controller
{
  [HttpGet]
  [Route("person/paymentDetails/create/{personId?}")]
  public ActionResult PaymentDetailsCreate(int? personId)
  {
      if (personId == null)
      {
          return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
      }
      Person person = db.People.Find(personId);

      if (person == null)
      {
          return HttpNotFound();
      }

      PersonPaymentDetailsViewModel personPaymentDetailsVM = new PersonPaymentDetailsViewModel();
      personPaymentDetailsVM.SetPerson(person);

      return View(personPaymentDetailsVM);
  }

  [HttpPost]
  [Route("person/paymentDetails/create")]
  public ActionResult PaymentDetailsCreate(PersonPaymentDetailsViewModel personPaymentDetailsVM)
  {
      if (ModelState.IsValid)
      {
          /* should not be entering here with sortCode = 123, as not 6 characters in length */
          return Content("No errors: |" + personPaymentDetailsVM.SinglePaymentDetails.sortCode + "|");
      }
  }
}

/* [VIEW] */
@model X.ViewModels.PersonPaymentDetailsViewModel

@Html.ValidationSummary()
@using (Html.BeginForm("PaymentDetailsCreate", "Person", FormMethod.Post, new { @class = " form-horizontal" }))
{
    @Html.HiddenFor(m => m.Person.id, "default")

    <div class="form-group">
        <label for="bankSortCode" class="col-md-3 control-label">Sort Code</label>
        <div class="col-md-9">
            @Html.EditorFor(m => m.SinglePaymentDetails.sortCode, new { htmlAttributes = new { @class = "form-control" } })
        </div>
    </div>

    <div class="form-group">
        <label for="save" class="col-md-3 control-label">&nbsp;</label>
        <div class="col-md-9">
            <button type="submit" class="btn btn-primary">Save</button>
        </div>
    </div>
}

/* [MODEL] */
public partial class PersonPaymentDetails
{
    public int id { get; set; }

    [Required, StringLength(6)]
    public string sortCode { get; set; }
}

/* [ViewModel] */
public class PersonPaymentDetailsViewModel
{
    public Person Person { get; set; }
    public PersonPaymentDetails SinglePaymentDetails { get; set; }

    public void SetPerson(Person person)
    {
        this.Person = person;
        this.SinglePaymentDetails = new PersonPaymentDetails();
    }
}

你要

[Required, StringLength(6, MinimumLength = 6)]

StringLength構造方法僅采用最大長度,因此,如您目前所擁有的那樣,它會檢查字符串不超過6個字符,因此長度為1的字符串已成功通過驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM