2012-02-17 8 views
0

(ここではそのコードの一部です)0:ActionMethodのparamは、私は、フォームを持っているたびに

@model Discussion 
@{ 
ViewBag.Title = "Edit Discussion"; 
Layout = "~/Views/Shared/_App.cshtml"; 
} 


    @using (Html.BeginForm("Update", "Discussion", FormMethod.Post, new { id = Model.discussionId, @class = "update" })) 
    { 
    ... rest of the view code 
    } 

マイ関連コントローラの更新方法があります。

 [HttpPost] 
     [ValidateInput(false)] 
     public ActionResult Update(FormCollection col, int id = 0) 
     { 
... rest of code 
} 

フォームが送信される

、私はモデルから見ているIDの代わりに0のIDを得ています。私がデバッグしたときにフォームのレンダリング中に内部がはっきりと表示されています。 ITは私が提出すると、idを正しく渡していません。

私はここで構文上何か間違っていますか? Html.BeginFormの新しい{}私は、あなたが見ることができるように、ここでIDとクラスのコレクションであるときにフォームが送信されるときに、この新しい匿名の型がこのIDにどのように一致しているのか分かりません。

答えて

2

new {id = Model.discussionId ...}を実行すると、フォーム要素のid属性が設定されます。 IDを正しく取得するには、フォームの入力にしなければなりません。ですから、このような何かを隠し入力要素を置くフォーム内:@Html.Hidden("id", Model.discussionId)

だからあなたの現在のフォームは、このような何かレンダリングしている:

<form id="theDiscussionId" class="update" action="/Discussion/Update"> 
    ... rest of the view code 
</form> 

をそして、あなたはそれがこのようなことする必要があります。

<form class="update" action="/Discussion/Update"> 
    <input type="hidden" name="id" value="theDiscussionId" /> 
    ... rest of the view code 
</form>