我正在開發我的第一個ASP.NET MVC 3項目。對於編輯頁面上的某些字段,我希望用戶能夠從先前輸入的值中選擇一個值或輸入一個新值,因此我使用jQuery自動完成功能來完成此操作。這部分似乎工作得很好。現在,對於某些字段用戶可以選擇是否輸入值,如果他們輸入一個值,我想根據一些規則驗證它,所以我創建了我自己的ValidationAttribute
。現場驗證的兩個問題
驗證部分將根據規則檢查給定值,並返回IsValid
調用的正確布爾值。大。
的第一個問題說我有是,如果我的驗證的IsValid
返回false,它會顯示我指定的錯誤消息,但如果我輸入一些東西,是有效的,TextBox
清除這是錯誤的背景顏色,但錯誤信息不清楚。這發生在FF或IE8中。
的第二個問題是,火狐,我的自動完成值將再次顯示,當我在文本框中,但在IE 8編輯文本,一旦出錯條件存在,我的自動完成停止工作。偶爾,如果我輸入一個我知道在自動完成列表中的值,它會顯示出來,但看起來有點片面。
我可能只是做這個驗證錯誤的東西。這是我使用的相關代碼。對於任何這些問題的指導,我都會很感興趣。該屬性是一個測試,但它展現了我的頁面上的行爲。
我ValidationAttribute:
public class MyAttribute : ValidationAttribute
{
...
public override bool IsValid(object value)
{
if (value == null)
{
return true;
}
var stringValue = Convert.ToString(value);
if (stringValue.Length == 0)
{
return true;
}
if (stringValue.Trim().Length == 0)
{
return false;
}
return true;
}
...
}
我的自動完成代碼:
$("#toppingid").autocomplete({
source: function (request, response) {
$.ajax({
url: '@Url.Action("AvailableToppings", "IceCream")', type: "POST", dataType: "json",
data: { query: request.term },
success: function (data) {
response($.map(data, function (item) {
return { label: item, value: item };
}))
}
})
},
minLength: 1
});
我的控制器動作:
public JsonResult AvailableToppings()
{
// I actually retrieve this differently, but you get the idea
List<string> all = new List<string>() { "BerryCrush", "Caramel", "Fudge" };
return Json(all, JsonRequestBehavior.AllowGet);
}
我的觀點片段:
@Html.TextBoxFor(model => model.Topping, new { @id = "toppingid" })
@Html.ValidationMessageFor(model => model.Topping)
我的視圖模型片段:
[DisplayName("Topping:")]
[MyAttribute(ErrorMessage = "Can't be all blanks!")]
public string Topping { get; set; }
在我的職務行爲,我的邏輯是這樣的:
[HttpPost]
public ActionResult Create(IceCreamCreateEditViewModel viewModel)
{
if (ModelState.IsValid)
{
// stuff happens here which isn't germane
return RedirectToAction("Index");
}
// redisplay the view to the user
return Create();
}
我想這是所有的代碼相關的作品。感謝您提供的任何指導。
感謝您的回覆,Darin。不幸的是,你的想法在我的頁面上不起作用 - 我得到的結果與以前一樣。我瀏覽了腳本,它確實到達'topping.addClass(...')行,但是錯誤信息仍然在頁面上, – itsmatt
@itsmatt,這是正常的,錯誤信息會保留下來,所有這一切都是重新應用當你從自動完成列表中選擇一個項目並且這是你的第一個問題時,紅色背景會丟失。當你提交表單時,錯誤信息將會消失,因爲通過你的自定義屬性在服務器上執行驗證 –
所以着色我一直都很好,正如我在我的問題中提到的那樣,文本不會消失 - 它的行爲與其他驗證字段的情況不同,在這些字段中顯示一些文本,並且一旦用戶正確編輯它,錯誤消息消失了,希望能模仿這種行爲,我想這是由於其他驗證是客戶端的事實,對嗎? – itsmatt