2016-06-19 5 views
0

というアトリビュートの画像と呼ばれるmodelと、postという別のmodelという画像があります。ユーザーはそれに画像を追加するためにポストをクリックすると、リストviewでは、それが正常に動作しますが、私はPostIdとしてModel画像であること保存する必要がHtmlActionLinkmvcでidをコントローラに渡す方法

@Html.ActionLink("Add Images", "AddImages", new { id = item.PostID })

経由PostIDを渡しますよく

public ActionResult AddImages(int id) 
    { 
     ImageViewModel images = new ImageViewModel(); 
     images.PostID = id;   
     return View(images); 
    } 
    [HttpPost] 
    public ActionResult AddImages(ImageViewModel image, HttpPostedFileBase images) 
    {    
     Image newImage = new Image(); 
     newImage.PostID = image.PostID; 
     return View("Index"); 
    } 

それは動作しません。この方法では、それが保存するときに、PostIDの値は0です。私もViewBagを使用してみましませんが、今のところ何の運。 AddImages Viewでは、TextBoxForまたはPostID属性のものはありません。ユーザーによって設定または表示されないためです。

+0

モデルのIDを格納するビューに入力を作成します。通常、隠された入力。 – Nkosi

+0

ビューモデルプロパティの名前を 'PostID'ではなく' ID'に変更すると、何もする必要はありません。フォーム 'action'属性のルート値として追加されます(HiddenFor()はありません)。ビューで必要) –

答えて

4

は、ビューのformタグでPostIdのための入力フィールドを追加する必要があります。

@Html.HiddenFor(m=>Model.PostId) 
+1

この方法は安全か、最善の方法ですか? – Sugafree

+0

私によれば、それは最も簡単な方法です – Mehmet

1

はい、PostIDはユーザーによって設定されていませんが、のサーバーへのポストバックとなるように、<form>に配置する必要があります。通常は、hidden fieldを使用します。以下のようないくつかの事:HttpPostアクションでPostIDを得るために

<form> 
    @Html.HiddenFor(m => Model.PostID) 

    <!-- Other fields here --> 
</form> 
関連する問題