2013-03-25 130 views
2

每当我尝试使用模型将视图中的值传递给控制器​​时,它将在控制器中显示为null。我在项目的另一部分尝试了一些非常类似的东西,但没有遇到这个问题。为什么这会回到空?MVC 3将View从视图传递给控制器​​

这里是从控制器代码:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using MovieProject2.Models; 

namespace MovieProject2.Controllers 
{ 

public class ReviewsController : Controller 
{ 
public ActionResult Edit(int id = -1) 
{ 
    if (id < 0) 
    return HttpNotFound(); 
    MovieReview review = MovieADO.getReviewByID(id); 
    return View(review); 
} 

[HttpPost] 
public ActionResult Edit(MovieReview review) 
{ 
    if (review == null) return HttpNotFound(); 
    return View(review); 
} 
} 

查看:

@model MovieProject2.Models.MovieReview 

@{ 
    ViewBag.Title = "Edit Review"; 
} 

@{ //Not null here 
    if(@Model != null) {<h2>Edit Review for @Model.MovieReviewed.Title</h2> 
    <h4>Reviewed by @Model.Reviewer.Username</h4>} 
               else{<h2>Not Found</h2> 
} 
} 

@using (Html.BeginForm()) 
{ 
    Html.ValidationSummary(true); 
    <fieldset> 
     <div class="editor-label"> 
      @Html.LabelFor(itemModel => Model.Rating) 
     </div> 
     <div class="editor-label"> 
      @Html.EditorFor(itemModel => Model.Rating) 
      @Html.ValidationMessageFor(itemModel => Model.Rating) 
     </div> 
     <div class="editor-label"> 
      @Html.LabelFor(itemModel => Model.Review) 
     </div> 
     <div class="editor-label"> 
      @Html.EditorFor(itemModel => Model.Review) 
      @Html.ValidationMessageFor(itemModel => Model.Review) 
     </div> 
     <p> 
      <input type="submit" value="Change" /> 
     </p> 
    </fieldset> 

} 

型号:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace MovieProject2.Models 
{ 
    public class MovieReview 
    { 
     public int ReviewID { get; set; } 
     public Movie MovieReviewed { get; set; } 
     public User Reviewer { get; set; } 
     public int Rating { get; set; } 
     public string Review { get; set; } 
     public DateTime DateReviewed { get; set; } 

     public MovieReview() { } 
    } 
} 
+0

也许你是从控制器意味着查看? – 2013-03-25 04:13:39

+0

你还没有提供足够的信息。可能还没有调查过。例如'MovieReview review = MovieADO.getReviewByID(id);'这个语句是否返回行?行动方法是否获得了一个ID传递?或者它使用默认的-1(我看到问题) – 2013-03-25 04:14:31

+0

不,它从控制器中的[HttpGet] Edit方法传递给Edit.cshtml,没有任何问题,但[HttpPost] Edit方法中的review参数返回当我点击提交时为null。 – user2206127 2013-03-25 04:17:13

回答

5

而不是

[HttpPost] 
public ActionResult Edit(MovieReview review) 

[HttpPost] 
public ActionResult Edit(MovieReview model) 

(在该方法从审查模型进一步将其重命名。它应该工作。

OR MovieReview.Review的别的东西

重命名属性(例如,Review1)。你不能有一个属性相同的名称,并通过模型对象(不区分大小写)

+0

呐喊,那里是 – 2013-03-25 05:55:12

+0

请显示这些索赔的来源。 – CodeCaster 2013-03-25 14:01:49

+0

非常感谢!有效。 – user2206127 2013-03-25 15:00:16

0

你一定要试试这个

@using (Html.BeginForm("Action methodName","controllerName")) 
+0

当我输入@using(Html.BeginForm(“Edit”,“Reviews”))时,它仍然返回null。 Idk如果我做对了。 – user2206127 2013-03-25 05:06:38

相关问题