Asp.net MVC 3将null从视图传递到控制器

Asp.net MVC 3将null从视图传递到控制器,asp.net,asp.net-mvc-3,Asp.net,Asp.net Mvc 3,每当我尝试使用模型将值从视图传递到控制器时,它在控制器中显示为null。我在项目的另一部分尝试了类似的方法,但没有出现这个问题。为什么会回来 以下是来自控制器的代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using MovieProject2.Models; namespace MovieProject2.Contro

每当我尝试使用模型将值从视图传递到控制器时,它在控制器中显示为null。我在项目的另一部分尝试了类似的方法,但没有出现这个问题。为什么会回来

以下是来自控制器的代码:

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);
}
}
你必须试试这个

@using (Html.BeginForm("Action methodName","controllerName"))
而不是

[HttpPost]
public ActionResult Edit(MovieReview review)

(并在该方法中将其从review更名为model。它应该可以工作


将MovieReview.Review的属性重命名为其他名称(例如,Review1)。属性和传递的模型对象不能具有相同的名称(不区分大小写)

可能是指从控制器到视图?您没有提供足够的信息。可能还没有调查。例如
MovieReview Review=MovieADO.getReviewByID(id);
此语句是否返回行?操作方法是否传递了一个id?或者它使用默认的-1(我发现有问题)否,它从控制器中的[HttpGet]编辑方法传递到Edit.cshtml没有任何问题,但是[HttpPost]中的review参数当我单击submit时,Edit方法返回空值。Dave A:感谢您的注意。action方法正在获得传递的id。GetReviewByID(id)然后获取id,查询数据库,并设置MovieReview对象的值。您的代码中没有任何明显的错误会导致这种情况发生。我注意到的一点是,您没有
@Html.HiddenFor(itemModel=>Model.ReviewId)
这是
编辑
视图的惯常做法-但这不会引起您的问题。您的视图中没有任何其他内容,是吗?当我键入@using(Html.BeginForm(“编辑”、“审阅”))如果我做得对,它仍然返回null.Idk。请显示这些声明的来源。@CodeCaster如果您以user2206127的方式创建表单,您将发现表单元素的名称为“Rating”和“Review”(没有任何前缀)。发布表单时,它通过ControllerActionInvoker.GetParameterValue方法(下载ASP.NET MVC的源代码以查看此内容),它会将“Review”值识别/匹配为“Review”(操作参数的名称)并将字符串作为模型对象传递…当然,不能将其转换为MovieReview对象,因此值为空。我们可以进一步分析asp.net mvc源代码,但此注释框的字符数有限。我认为这与OP的“EditorFor”有更大关系(itemModel=>Model’notation.“Model”不应该是“itemModel”吗?@CodeCaster您可以试试。在我的测试中,即使使用“itemModel”,我仍然会得到null,但可能会发生我的测试中出现其他错误。无论如何,我确信必须有其他方法来解决这个问题(包括更改asp.net mvc的源代码).请告诉我们您的发现。
@using (Html.BeginForm("Action methodName","controllerName"))
[HttpPost]
public ActionResult Edit(MovieReview review)
[HttpPost]
public ActionResult Edit(MovieReview model)