使用html.beginform在mvc3中发送模型

时间:2012-03-12 01:42:51

标签: c# asp.net-mvc-3 razor html.beginform

我有一个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个按钮来发送正确的评级。

谢谢

2 个答案:

答案 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)

我认为您需要解决两件事:

  1. input代码需要name属性
  2. name属性应设置为model.Rating