[英]Disable MVC “must be a number” data type validation for a field
我有一個Telerik MVC組合框,其中包含位置列表。 客戶希望最終用戶能夠直接在列表中輸入新位置。
提交表單后,它應該接受一個新值並將其插入到locations表中,並且當然要更新要添加到新插入位置的ID中的記錄的LocationID。
閱讀以下代碼片段
我讀過ComboBox確實允許您輸入列表中未包含的值,並使用了演示( 此處 )
保存位置的代碼,編輯locationID沒問題。 我的問題是我的組合框包含一個整數/字符串值對列表,而不是字符串/字符串。 因此,我在代碼中遇到的問題是,如果我嘗試提交新的位置名稱,它將嘗試對其進行驗證,並說它不是數字。
我需要一種方法來僅針對LocationID字段嘗試抑制此驗證,但仍要防止出現空值。
BEGIN EDITS
編輯:我確實找到了這篇文章 ,但是正如OP所說的那樣,javascript hack不是非常可擴展的,所以我真的想避免它。
編輯:
我最終使用了JavaScript hack,發現了所有可用的方法。 我計划將其封裝在方法或屬性中,並將其發布為答案。
我發現使用此黑客,如果我使用Telerik()。ScriptRegistrar()。OnDocumentReady()將代碼塊放置在文檔就緒事件中,則它在Firefox或Chrome中不起作用,正確的window.mvcClientValidationmetadata到達時會以某種方式清除即使元數據最初已正確推送,也會發生此事件。
為了解決這個問題,我不得不手動將代碼放在其自己的腳本塊中,形式為結束標記(這是呈現客戶端驗證數組的位置)。
END EDITS
此外,現在我直接綁定到模型,如下所示:
public JsonResult Create(MyEntity Model)
我不確定進行模型綁定時如何解決這個問題,我猜想它可能只會返回一個錯誤,而且我什至都無法獲得動作方法代碼。
所以我想這里的想法是在方法簽名中使用FormCollection,檢測非整數的LocationID,插入更新,然后運行UpdateModel()? 當然,歡迎提出更好的建議。
謝謝!
代碼段
模型:
class IntegerValueList
{
public Int16 ID { get; set; }
public string Name { get; set; }
}
var lists = new Dictionary<string, IEnumerable<object>>();
lists["Locations"] = (from record in db.Locations
orderby record.Name
select new IntegerValueList
{
ID = record.LocationID,
Name = record.Name
}).ToList();
控制器:
LocationList = new SelectList(lists["Locations"], "ID", "Name", LocationID);
視圖:
<td>
<div class="editor-field">
<%: Html.Telerik().ComboBoxFor(model => model.LocationID)
.BindTo(Model.LocationList)
.Filterable(c => c.FilterMode(AutoCompleteFilterMode.Contains))
%>
<%: Html.ValidationMessageFor(model => model.LocationID, "*") %>
</div>
</td>
過去,當我不得不執行此操作時,我為該字段使用了一個文本框,其標簽為“輸入位置”,然后在其下方的下拉菜單中為標簽為“或選擇...”,然后使用下拉列表的onChange事件以填充文本框。 現在,您不驗證下拉列表。
您甚至可以在文本框旁邊放置一個“選擇”鏈接,並隱藏下拉菜單,直到單擊該鏈接為止。 缺點是我們最終可能將San Diego,SanDiego和Sandiego都輸入到位置列表中...但是,那么您客戶的要求並不能使我們明確地避免這種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.