2013-09-05 38 views
14

私の背景部分図でASP.NET MVC検証と親ビューに戻る

は、私は従来のASP時代からWeb開発に取り組んで持っていますWebformsをよく把握しています。 MVCは非常にエキサイティングであり、良い進歩を遂げています。しかし、今私はこのフォーラムで助けが必要な状況に陥っています。

クエリの背景

私は親ビューを持っており、その中に部分的なビューがあります。部分ビューにはフォームと送信ボタンがあります。部分ビューには独自のローカルビューモデルがあり、そのビューモデルは親ビューモデルのプロパティの1つです。

パーシャルビューの検証が失敗した場合は、親ビューをそのまま表示し、部分ビューで無効なフィールドを強調表示します。

コードはどこにも破損していませんが、検証エラーが発生した場合、何らかの形で、渡された初期化モデルで親ビューを表示する正しい方法が見つかりません。もちろん、部分的な見方でエラーを強調表示することもできます。

ご協力いただければ幸いです。ありがとう。

ビューモデル::

コードは次のようになります

public class ParentViewModel 
{ 
    public int TitleId { get; set; } 
    public string Name { get; set; } 
    public ChildViewModel Child { get; set; } 
} 

public class ChildViewModel 
{ 
    [Required] 
    public decimal Rating { get; set; }   

    [Required] 
    [StringLength(500)] 
    [Display(Description = "Review")] 
    [RegularExpression("([a-zA-Z0-9 .&'-]+)", ErrorMessage = "Enter only alphabets and numbers of First Name")] 
    public string ReviewText { get; set; } 
} 

コントローラ

public class TestController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new ParentViewModel() 
         { 
          TitleId = 1,Name = "Parent name", 
          Child = new ChildViewModel() 
             { 
              Rating = 2.5M, ReviewText = "Its a must watch!" 
             } 
         }; 
     return View("Index", model); 
    } 

    [HttpPost] 
    public ActionResult SubmitReview(ChildViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      return View("_child", model); 
     } 

     ModelState.AddModelError("", "Some Error."); 
     return View("_child", model); 
    } 
} 

親ビュー

@model ParentViewModel 
@{ 
    Layout = null; 
} 
<!DOCTYPE html> 
<html> 
<head> 
    <title>Index</title> 
</head> 
<body> 
    <div> 
     @Model.TitleId, @Model.Name   
    </div> 
    <div> 
     @Html.Partial("_child", Model.Child) 
    </div> 
</body> 
</html> 

部分図(_child.cshtml)

@model ChildViewModel 
@using (Html.BeginForm("SubmitReview", "Test")) 
{ 
    @Html.ValidationSummary(true) 

    @Html.TextBoxFor(m => m.Rating)  @Html.ValidationMessageFor(m => m.Rating) 
    @Html.TextBoxFor(m => m.ReviewText) @Html.ValidationMessageFor(m => m.ReviewText) 
    <input type="submit" value="Log in" /> 
} 

答えて

8

あなたは親ビューでない子1を表示する必要があるので、アクションは次のようになります。完璧な理にかなっていること

[HttpPost] 
    public ActionResult SubmitReview(ChildViewModel model) 
    { 
      var parentViewModel = write init code here; 
      parentViewModel.ChildModel = model; 

     if (ModelState.IsValid) 
     { 

      return View("Index", parentViewModel); 
     } 

     ModelState.AddModelError("", "Some Error."); 
     return View("Index", parentViewModel); 
    } 
+0

。しかし、提出時に再び親モデルを初期化するのを避ける方法はありますか?今、私はSubmitReviewに親モデルを渡そうとしていますが、親モデルは値を覚えていません。しかし、あなたの提案のおかげで、私はそれが動作しますcozを実装します。送信時に –

+0

、どのように私はそれを初期化するために親のキーを保持する必要がありますか? .....私はいくつかの意味があると思います..... –

+0

フォームを親ビューに移動することができます(これは実際には良い方法です)。隠しフィールドに親モデルを追加すると、サブミットをクリックすると完全なデータが得られますコントローラーで –

関連する問題