Ajax.BeginForm在For循环中更新唯一的div id

时间:2011-09-27 19:33:06

标签: asp.net-mvc-3

更新 我最后只使用Session Variables将值传递给Ajax.BeginForm块。这是一个我不想使用的黑客,但我找不到另一种方式......

原帖 我正在使用For循环,它在循环中为每个注释div分配一个唯一的ID,如:

<div id="comment@(feedModel.PostID)"></div>

EX:

注释1

注释2

将comment3

这些div中的每一个都有一个带有输入提交按钮的Ajax.BeginForm。我想设置UpdateTargetId AjaxOption,但我不能,因为每个id都是唯一的。所以UpdateTargetId =“div”将不起作用。我不能只传入模型或TempData,因为这是Ajax.BeginForm。那么如何传入feedModel.PostID?

代码:

@foreach (Website.Models.FeedModel feedModel in Model)
{
    <span id="commentspan@(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="comments@(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 = 
"comments@TempData['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>
}

向Action发布哪些帖子。字符串id为null,因为您无法将Model值或Temp Data传递给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});
    }

1 个答案:

答案 0 :(得分:1)

假设Ajax.BeginForm位于For循环内,您可以使用您已经使用的相同方法为目标div提供唯一ID,如下所示:

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

然后,在循环中,定义目标div:

<div id="target@feedModel.PostID" />

<强>更新

根据您发布的代码,假设您传递的context值正在传递到路径中的id tokenvalue,然后您可以在PartialView中捕获此值,如下所示:

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

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