更新 我最后只使用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});
}
答案 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。