2012-10-23 5 views
9

@ Html.Textboxからの入力に基づいて更新アクションを使用して更新します。MVC4の@ Html.Textboxの検証

@using (Html.BeginForm("Update", "Shopping", new { UserID = Request.QueryString["UserID"] }, FormMethod.Post, new { id = "myForm" })) 
    {    
    @Html.ValidationSummary()     
    @Html.Hidden("id", @Request.QueryString["UserID"] as string) 
    @Html.Hidden("productid", item.ProductID as string) 
    @Html.TextBox("Quantity", item.Quantity) 
    @Html.ValidationMessage("Quantity", "*") 
    @Html.Hidden("unitrate", item.Rate)    
    <input type="submit" value="Update" /> 
    } 

と私のモデルクラスで

 [Required(ErrorMessage = "Quantity is required.")] 
     [Display(Name = "Quantity")] 
     [Range(2, 100, ErrorMessage = "There is not enough inventory for the product to fulfill your order.")] 
     public int? Quantity { get; set; } 

問題は、私はテキストボックスが空の場合、検証メッセージが届かないメートルです。 しかし、私は検証メッセージを取得しています@ Html.TextBoxFor

@Html.TextBoxFor(modelItem => item.Quantity) 
    @Html.ValidationMessageFor(modelitem => item.Quantity) 


を使用する場合。私の更新アクションは機能していません。
ここには2つのオプションがあります。
1. @ Html.TextboxForでテキストボックス名 "qty"を渡す方法(または)@ Html.ValidationMessage()

任意の提案..

EDITを使用して)(@ Html.Textboxに検証メッセージを取得する方法
2: 私の更新アクションを

[HttpPost] 
    public ActionResult Update(string id, string productid, int Quantity, decimal unitrate) 
     { 
     if (ModelState.IsValid) 
     { 
        int _records = UpdatePrice(id, productid, Quantity, unitrate); 
        if (_records > 0) 
        { 
         return RedirectToAction("Index1", "Shopping", new { UserID = Request.QueryString["UserID"] }); 
        } 
        else 
        { 
         ModelState.AddModelError("","Can Not Update"); 
        } 
       } 
       return View("Index1"); 
      } 
+3

これは非常に多くの方法で非常に間違っています。基本的にMVCのすべての規約を破っており、それが機能することを期待しています。 MVCでは、検証するプロパティと同じ名前のテキストボックスが必要です。テキストボックス 'Quantity'に名前を付けることによって、Html.TextBoxで検証メッセージを取得します。 –

+0

テキストボックスにも正確な名前「数量」を入力してみました。しかし、検証メッセージは表示されません。代わりに、私はこのようなメッセージが表示されます。 "パラメータ辞書には、nullable型のパラメータ 'Quantity'のヌルエントリが含まれています。コントローラのメソッドには 'System.Int32'が含まれていません。 – kk1076

+0

彼らが何であるかを知るのに十分な文脈を与えていない。 Quantityはビューモデルのネストされたオブジェクトにありますか? TextBoxForメソッドを使用するときは、レンダリング時にWebページのソースを表示し、テキストボックスのName属性を確認します。代わりに "item.Quantity"という名前を付けてください。 –

答えて

5

あなたが使用している場合、あなたの問題の答えを持ってい

@Html.TextBoxFor(modelItem => item.Quantity) 
@Html.ValidationMessageFor(modelitem => item.Quantity) 

MVCモデル検証がname属性で動作するため、エラーメッセージが表示される@Mystere Manは、すべての規約と規約を無視しているコメントでは、MVCのことをすべて無視しているか、モデルのプロパティ名を変更するか、 MVCのモデル検証を活用したいと思えばそれは視野に入っています。


Not entirely relevant but a good read.

関連する問題