2

モデルを使用してビューからコントローラーに値を渡そうとすると、コントローラーにnullとして表示されます。プロジェクトの別の部分で非常によく似たものを試しましたが、この問題は発生しませんでした。なぜこれが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);
}
}

意見:

@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() { }
    }
}
4

2 に答える 2

6

それ以外の

[HttpPost]
public ActionResult Edit(MovieReview review)

書きます

[HttpPost]
public ActionResult Edit(MovieReview model)

(そして、そのメソッドでレビューからモデルにさらに名前を変更します。動作するはずです。

また

MovieReview.Reviewのプロパティの名前を別の名前に変更します(たとえば、Review1)。プロパティと渡されたモデルオブジェクトに同じ名前を付けることはできません(大文字と小文字は区別されません)

于 2013-03-25T05:24:48.143 に答える
0

あなたはこれを試してみる必要があります

@using (Html.BeginForm("Action methodName","controllerName"))
于 2013-03-25T04:53:06.887 に答える