2016-11-08 51 views
2

我創建了一個View for表單提交,我希望表單數據在點擊Submit按鈕後傳遞給Controller。MVC 5 - 在窗體(視圖)上輸入的值沒有傳遞給控制器​​

爲了簡單起見,我按比例縮小了模型和視圖。

當我斷開HomeController並執行步驟: ReviewViewModel reviewViewModelx = reviewViewModel; 從我期望的形式填寫沒有值。

查看:

@model ReviewViewModel 


<div class="panel-body"> 
    @using (Html.BeginForm("SubmitReview", "Home", FormMethod.Post, new { model = Model })) 
     { 
     @*@Html.AntiForgeryToken()*@ 
     @Html.ValidationSummary("", new { @class = "text-danger" }) 
     <div class="form-horizontal"> 

       <div class="form-group"> 
        @Html.LabelForRequired(model => model.ReviewModel.Name, htmlAttributes: new { @class = "control-label col-md-5" }) 
        <div class="col-md-5"> 
         @Html.EditorFor(model => model.ReviewModel.Name, new { htmlAttributes = new { @class = "form-control" } }) 
         @Html.ValidationMessageFor(model => model.ReviewModel.Name, "", new { @class = "text-danger" }) 
        </div> 
       </div> 

       <div class="form-group"> 
        @Html.LabelForRequired(model => model.ReviewModel.Degree, htmlAttributes: new { @class = "control-label col-md-5" }) 
        <div class="col-md-5"> 
         @Html.EditorFor(model => model.ReviewModel.Degree, new { htmlAttributes = new { @class = "form-control" } }) 
         @Html.ValidationMessageFor(model => model.ReviewModel.Degree, "", new { @class = "text-danger" }) 
        </div> 
       </div> 

      <div class="form-group"> 
       <div class="col-md-offset-2 col-md-5"> 
        <input type="submit" value="Submit Review" class="btn btn-default" /> 
       </div> 
      </div> 
    </div> 
     </div> 
    } 

ReviewViewModel此視圖模型包含3個不同的數據模型,我只顯示下方,因爲這是正在被填充什麼複習課。

public class ReviewViewModel 
    { 
     public VideoTypeModel VideoTypeModel; 
     public VideoModel VideoModel; 
     public ReviewModel ReviewModel; 
     public ReviewViewModel() 
     { 
      VideoTypeModel = new VideoTypeModel(); 
      VideoModel = new VideoModel(); 
      ReviewModel = new ReviewModel(); 
     } 
     public ReviewViewModel(VideoTypeModel videoTypeModel, VideoModel videoModel, ReviewModel reviewModel) 
     { 
      this.VideoTypeModel = videoTypeModel; 
      this.VideoModel = videoModel; 
      if (reviewModel != null) 
      { 
       this.ReviewModel = reviewModel; 
      } 
     } 
    } 

評分數據模型:

ReviewModel

public class ReviewModel 
{ 

    [Required] 
    [Display(Name="Name: ")] 
    public string Name { get; set; } 

    [Required] 
    [Display(Name="Degree:")] 
    public string Degree { get; set; } 

} 

的HomeController
如前所述,第一步驟之後,有在reviewViewModelx.ReviewModel.Name沒有值或 reviewViewModelx.ReviewModel.Email(或模型中的任何其他字段爲I爲簡潔起見,在本樣本中刪除。

[HttpPost] 
public ActionResult SubmitReview(ReviewViewModel reviewViewModel) 
{ 
    ReviewViewModel reviewViewModelx = reviewViewModel; 
    SendReviewEmail ce = new SendReviewEmail(null); 
    SendReviewEmailToTech ste = new SendReviewEmailToTech(null); 
    return View(reviewViewModel); 
} 


我有點新手到MVC的,任何援助表示讚賞。提前致謝!

+0

您不需要在BeginForm聲明中傳遞模型。事實上,我認爲FormMethod.Post之後的參數應該是HtmlAttributes,而不是RouteValues。檢查api確定。你的模型中有IEnumerable類型嗎? – JanneP

回答

2

編輯:看來問題可能出現在您的ReviewViewModel中。我沒有一個MVC項目在我面前,但我認爲你可能錯過了你的getter和setter對象。你可以嘗試這樣的:

public class ReviewViewModel 
    { 
     public VideoTypeModel VideoTypeModel {get; set; } 
     public VideoModel VideoModel {get; set; } 
     public ReviewModel ReviewModel {get; set; } 
    } 

在你的控制器,你需要添加郵政標籤。通常情況下,您將爲HttpGet和HttpPost執行一個操作

public ActionResult SubmitReview() 
{ 
    return View(); 
} 

[HttpPost] 
public ActionResult SubmitReview(ReviewViewModel reviewViewModel) 
{ 
    ReviewViewModel reviewViewModelx = reviewViewModel; 
    SendReviewEmail ce = new SendReviewEmail(null); 
    SendReviewEmailToTech ste = new SendReviewEmailToTech(null); 
    return View(reviewViewModel); 
} 
+0

我很抱歉沒有在我的代碼片段中,但我確實有它在那裏。我剛剛更新了我的原始問題的屬性.. – DanO

+0

賓果與構造... Thx Wellspring! – DanO

+0

很好,所以它是你的構造函數,而不是導致問題的getter/setter?如果是這樣,我會將我的答案更新回以前的編輯以反映正確的解決方案。 – Wellspring

相關問題