3

アクション メソッド Rate() の HttpPost および HttpGet バージョンがあります。

http://pastebin.com/embed_js.php?i=6x0kTdK0

    public ActionResult Rate(User user, Classified classified)
    {
        var model = new RatingModel
                {
                    CurrentUser = user,
                    RatedClassified = classified,                        
                };
        return View(model);
    }
    [HttpPost]
    public ActionResult Rate(RatingModel model)
    {
        model.RatedClassified.AddRating(model.CurrentUser, model.Rating);
        return RedirectToAction("List");
    }

HttpGet Rate() が返すビュー:

@model WebUI.Models.RatingModel
@{
    ViewBag.Title = "Rate";
}
Rate @Model.RatedClassified.Title
@using(Html.BeginForm("Rate","Classified", FormMethod.Post))
{
    for (int i = 1; i < 6; i++)
    {
        Model.Rating = i;
        <input type="submit" value="@i" model="@Model"></input>
    }
} 

Form を介して Post メソッドにモデルを送信する方法を見つけようとしていますが、送信ボタンのタグの値「モデル」がそのためのパラメーターになると考えていましたが、次の場合は null が渡されますPost メソッド内のブレークポイント。for ループは、適切な評価を送信するために 5 つのボタンを作成しようとしています。

ありがとう

4

2 に答える 2

5

ビュー内のプロパティにname一致する名前属性を指定する必要があることを@Rageshが示唆しているため、それらのモデルバインディングは属性で機能します。RatingModelまた、送信ボタンの値がサーバーに送信されないことにも注意してください。それを実現するためのハックがあります。1 つの方法は、隠しフィールドを含めることです。

また、提供されたコードでは、ループが6回実行され、最後に常にModel.Rating同じになり5ます...何を達成しようとしていますか?. たとえば、次のようなモデルがあるとします

public class MyRating{

 public string foo{get;set;}

 }

あなたの見解では

@using(Html.BeginForm("Rate","Classified", FormMethod.Post))

 @Html.TextBoxFor(x=>x.foo) //use html helpers to render the markup
 <input type="submit" value="Submit"/>
}

これで、コントローラーは次のようになります

[HttpPost]
    public ActionResult Rate(MyRating model)
    {
        model.foo // will have what ever you supplied in the view
        //return RedirectToAction("List");
    }

あなたがアイデアを得ることを願っています

于 2012-03-12T05:37:35.140 に答える
0

修正する必要があるのは次の 2 点だと思います。

  1. inputタグには属性nameが必要です
  2. name属性はに設定する必要がありますmodel.Rating
于 2012-03-12T02:20:18.480 に答える