2011-09-27 35 views
1

更新 我最終只使用會話變量將值傳遞給Ajax.BeginForm塊。這是我不想用一個黑客,但我就是無法找到另一種方式......Ajax.BeginForm更新For循環中的唯一div ID

原貼 我使用一個for循環,在循環中一個唯一的ID給每個評論的div像:

<div id="[email protected](feedModel.PostID)"></div> 

EX:

註釋1

註釋2

COMM ent3

這些div的每個人都有一個輸入的Ajax.BeginForm提交按鈕。我想設置UpdateTargetId AjaxOption,但我不能,因爲每個ID都是唯一的。所以UpdateTargetId =「div」將不起作用。我不能傳入模型或TempData,因爲這是Ajax.BeginForm。那麼如何傳入feedModel.PostID?

代碼:

@foreach (Website.Models.FeedModel feedModel in Model) 
{ 
    <span id="[email protected](feedModel.PostID)" style="margin-top:5px; display:block; 
     font-weight:bold"><a href="#" onclick="loadPartialView(@feedModel.PostID); 
     return false;">Comments(@feedModel.Replies)</a></span> 
    <div id="[email protected](feedModel.PostID)"></div> 

}

的JavaScript被稱爲:

function loadPartialView(context) { 
method HomeController._Comments 
$('#comments' + context).load('Home/_Comments/' + context); 
} 

內部的PartialView

@if (Request.IsAuthenticated) 
{ 
<div class="childpost"> 
@using (Ajax.BeginForm("SubmitChildPost", "Home", new AjaxOptions { UpdateTargetId = 
"[email protected]['feedModelID'].ToString()" }, new { id = 
@TempData["feedModelID"].ToString() })) 
{ 
    @Html.TextArea("MessageBox", "", 2, 50, null) 
    <br /> 
    <p> 
     @Html.AntiForgeryToken() 
     <input type="submit" value="Reply" class="replybutton" /> 
    </p> 
} 
</div> 
} 

哪些職位的行動。字符串ID爲空,因爲你不能將模型值或溫度數據的Ajax.BeginForm所以我不知道該怎麼辦......

[ValidateAntiForgeryToken] 
    public ActionResult SubmitChildPost(FormCollection formValue, string id) 
    { 
     string message = formValue["MessageBox"].ToString(); 

     if (message != "") 
     { 
      MessageRepository.UpdatePostReply(Convert.ToInt32(id)); 
      MessageRepository.SaveChildPost(message, id, User.Identity.Name); 
     } 

     return RedirectToAction("_Comments", "Home", new { ID = id}); 
    } 
+0

僅供參考,以供將來參考,把一個連字符在@前面的作品「評論 - @(feedModel.PostID)」。一直運行這個。 –

回答

1

假設Ajax.BeginFormFor環內,你可以使用你已經在使用同樣的方法得到目標的div一個唯一的ID,像這樣:

@using (Ajax.BeginForm("Comment", "Comments", new AjaxOptions() 
    { HttpMethod = "Post", UpdateTargetId = "target" + feedModel.PostID })) 

然後,在你的循環中,定義目標DIV:

<div id="[email protected]" /> 

UPDATE

根據您發佈的代碼,做這樣的假設:context值要傳遞被傳遞到路線中的ID tokenvalue,那麼你可以按如下捕捉到PartialView這個值:

@{ 
    var id = this.Request.RequestContext.RouteData.Values["id"].ToString(); 
} 

然後,您可以使用id分配你的唯一ID。

+0

如果我使用HTML.BeginForm,將工作,但Ajax.BeginForm feedModel.PostID爲空。 – Allensb

+0

請張貼一些示例代碼來說明你在做什麼。 – counsellorben

+0

我添加了一些代碼。 – Allensb