我是ASP.NET MVC 5的新手。我喜歡學習在視圖和視圖模型之間構建雙向綁定的正確方法。並利用客戶端驗證腳本。如何使用ASP.NET MVC 5進行客戶端驗證?
這是我所做的。
- 我加載jQuery庫v 1.10.1
- 我加載Jquery-Validation
- 我裝jQuery.Unobtrusive.Validation
我創建一個視圖模型,像這樣
public class RequestFormViewModel
{
[Required]
[Display(Name = "Day Of")]
public DateTime LocalFrom { get; set; }
[Required]
[Display(Name = "Does not matter since this will be hidden and I use javascript to populate the value here when before the for is submitted")]
public DateTime From { get; set; }
public RequestFormViewModel()
{
}
public RequestFormViewModel(DateTime localFrom, DateTime from)
{
this.LocalFrom = localFrom;
this.From = from;
}
}
這就是我如何創造了我的觀點。請注意,我將主持人或業務層(即DefaultViewPresenter
)傳遞給我的視圖,而不是ViewModel。該類DefaultViewPresenter
有一個屬性nammed Request
。 (下面我會告訴我的演講看起來像)
@model Proj.Presenters.DefaultViewPresenter
@using (Html.BeginForm("Index", "Track", FormMethod.Post, new { @class="form-inline", Id = "TrackActionForm" }))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(m => m.Request.LocalFrom, new { Id = "TrackFrom", Name = "From" })
<div class="input-group">
@Html.TextBoxFor(m => m.Request.LocalFrom, new { Value = Model.Request.LocalFrom.ToString("MM/dd/yyyy"), @class = "form-control small", Id = "TrackLocalFrom", Name = "LocalFrom" })
@Html.ValidationMessage("LocalFrom")
<span class="input-group-btn">
<button class="btn btn-info" type="button" id="TrackSubmit">View</button>
</span>
</div>
}
這是我演講的樣子
public class DefaultViewPresenter
{
public RequestFormViewModel Request { get; set; }
.... // some other propertied that I need for the view that are not related to my form
....
....
}
問題
當我提交表單,表單沒有得到提交!我不會收到任何錯誤。它就像提交按鈕在點擊事件上有return;
函數。
如何讓腳本正確驗證以及何時表單有效處理了發佈請求?
我在這裏錯過了什麼?我該如何糾正這個問題?
運行我的應用程序後,這是HTML標記是剃刀產生
<form novalidate="novalidate" id="TrackActionForm" action="/Track" class="form-inline" method="post">
<input name="__RequestVerificationToken" value="thmJX-Mlj5WjM3e7WMbgtb8KiEf4vuUKGzon4zO18fHDDY3cWpm2M1Lks8HbZDxX2qz7UxpRsoYvz2njNwYS_D8zclTvu9pdsJlSO0ckNLQ1" type="hidden">
<input id="TrackFrom" name="From" data-val="true" data-val-date="The field Day Of must be a date." data-val-required="The Day Of field is required." value="9/14/2016 12:00:00 AM" type="hidden">
<div class="input-group">
<input id="TrackLocalFrom" name="LocalFrom" value="09/14/2016" class="form-control small" type="text">
<span class="field-validation-valid" data-valmsg-for="LocalFrom" data-valmsg-replace="true"></span>
<span class="input-group-btn">
<button class="btn btn-info" type="button" id="TrackSubmit">View</button>
</span>
</div>
</form>
感謝您在這裏的幫助。驗證仍然不適用於我。當我點擊'View'按鈕時,什麼都沒有發生。我希望表單能夠被提交。另外,現在'LocalFrom'中的值顯示日期和時間。我只想顯示沒有時間的日期。我在我的ViewModel中添加了[DisplayFormat(DataFormatString =「{0:MM/dd/yyyy}」)]'並刪除了@ Html.TextBoxFor'中的第二個參數,可能導致表單不提交? – Jaylen
啊。你的'VIew'按鈕就是這個 - 它是一個按鈕。將其更改爲'type =「submit」'或使用''。然後,如果您清除文本框中的文本,然後單擊「查看」,則會顯示錯誤消息。 –
此外,如果您使用'DisplayFormatAttribute',那麼您還需要'ApplyInEditMode = true'並使用'EditorFor()'目前,堅持使用TextBoxFor()中的第二個參數來格式化值 –