2012-03-12 69 views
3

發送在MVC3模型我有動作方法速率()的HttpPost和HTTPGET版本:使用html.beginform

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速率()返回的視圖:

@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> 
    } 
} 

我想通過表單發送一個模型到Post方法,我的想法是提交按鈕的標記中的值「模型」將是這樣做的參數,但是如果我在Post方法內斷點,則傳遞null。 for循環試圖創建5個按鈕來發送正確的評分。

感謝

+0

HTTP:/ /stackoverflow.com/editing-help#code – SLaks 2012-03-12 01:47:22

+0

pastebin鏈接不是SO上的代碼塊的好替代品。 – 2012-03-12 01:50:41

回答

0

我認爲有兩件事情你需要修復:

  1. input標籤需要一個name屬性
  2. name屬性應該設置爲model.Rating
5

他們的模型綁定對name屬性起作用,因爲@Ragesh建議您需要指定fy與視圖中的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"); 
    } 

希望你能得到的想法