簡體   English   中英

禁用字段的MVC“必須為數字”數據類型驗證

[英]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.

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