我有一个HttpPost和HttpGet版本的动作方法Rate():
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方法发送模型,我的想法是提交按钮标记中的值“model”将是执行此操作的参数,但是null通过了如果我在Post方法内部断点。 for循环试图创建5个按钮来发送正确的评级。
谢谢
答案 0 :(得分:5)
Them模型绑定适用于name
属性,因为@Ragesh建议您需要在视图中指定与RatingModel
属性匹配的名称属性。另请注意,提交按钮值不会发布到服务器,有一些黑客可以通过它实现,一种方法是包含隐藏字段。
同样在您提供的代码中,循环运行六次,最后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");
}
希望你能得到这个想法
答案 1 :(得分:0)
我认为您需要解决两件事:
input
代码需要name
属性name
属性应设置为model.Rating