簡體   English   中英

使用xval的C#mvc2客戶端表單驗證,防止發布

[英]C# mvc2 client side form validation with xval, prevent post

我正在使用xval在asp.net mvc2 Web應用程序中使用客戶端驗證。 盡管我在數字字段中輸入文本時出現錯誤,但它仍然嘗試將表單發布到數據庫中。 不正確的值將替換為0並保存到數據庫。 但是相反,甚至不可能嘗試提交表單。 有人可以幫我從這里出去嗎?

我將屬性設置如下:

[Property]
[ShowColumnInCrud(true, label = "FromPriceInCents")]
[Required]
//[Range(1, Int32.MaxValue)]
public virtual Int32 FromPriceInCents{ get; set; }

捕獲請求的控制器如下所示; 我在這部分沒有任何錯誤。

[AcceptVerbs(HttpVerbs.Post)]
[Transaction]
[ValidateInput(false)]
public override ActionResult Create()
{
  //some foo happens
}

我的看法如下所示:

<div class="label"><label for="Price">FromPrice</label></div>
<div class="field">
<%= Html.TextBox("FromPriceInCents")%>
<%= Html.ValidationMessage("product.FromPriceInCents")%></div>

在視圖的最后,我有以下規則,該規則在html代碼中生成正確的驗證規則

<%= Html.ClientSideValidation<Product>("Product") %>

我希望有人能幫助我解決這個問題,謝謝!

編輯:4月19日,我剛剛發現有一個正常的按鈕正在使用,而不是輸入type =“ Button”可能是問題嗎?

<button class="save" type="submit" name="save"><span>Opslaan</span></button>

我首先要關注的是:為什么您的應用程序首先將值保存在數據庫中? 盡管xVal是使應用程序易於使用的好方法,但您仍然必須進行服務器端驗證。 如果您不驗證服務器上的數據,則將面臨巨大的安全漏洞! 保存值之前,請嘗試檢查控制器中是否有ModelState.IsValid。

現在,據我所知,您正在使用來注冊xVal驗證

<%= Html.ClientSideValidation<Product>("Product") %>

它的工作方式是為所有以“ Product”為前綴的控件啟用客戶端驗證。 另一方面,您的文本框的ID為FromPriceInCents

因此,這里的解決方案是這樣做:

<%= Html.TextBox("FromPriceInCents")%>
<%= Html.ValidationMessage("FromPriceInCents")%>

<%= Html.ClientSideValidation<Product>() %>

UPD3我更新了帖子。 修復了代碼,因此不使用前綴。

另外,我編譯了一個包含工作解決方案的工作解決方案。 列出,編輯,創建頁面,字符串和int屬性以及xVal驗證。

public class Product
{
    [ScaffoldColumn(false)]
    public int Id { get; set; }

    [Required]
    [Range(1,50)]
    public int PriceInCents { get; set; }

    [Required]
    [StringLength(50)]
    public string Name { get; set; }
}

並在視圖上

<%= Html.TextBoxFor(model => model.PriceInCents) %>
<%= Html.ValidationMessageFor(model => model.PriceInCents) %>

這是下載鏈接。請檢查一下並告訴我它是否有效http://www.flexlabs.org/download/xValTest

為什么將Range屬性注釋掉了? 使用您指定的屬性,只要在文本框中輸入任何內容,它就應該通過客戶端驗證。

暫無
暫無

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

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