Ajax.BeginForm Обновление уникального идентификатора div в For Loop - PullRequest
1 голос
/ 27 сентября 2011

Обновление Я просто использовал переменные сеанса для передачи значений в блок Ajax.BeginForm. Это хак, который я не хотел использовать, но я просто не мог найти другой способ ...

Оригинальный пост Я использую цикл For, который присваивает каждому комментарию div в цикле уникальный идентификатор, например:

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

EX:

comment1

comment2

comment3

Каждый из этих div имеет Ajax.BeginForm с кнопкой ввода ввода. Я хочу установить AjaxOption UpdateTargetId, но не могу, потому что каждый идентификатор уникален. Так что 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>
}

Какие сообщения в Акции. Идентификатор строки имеет значение null, потому что вы не можете передать значения модели или временные данные в 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 Ответ

1 голос
/ 28 сентября 2011

Предполагая, что Ajax.BeginForm находится внутри цикла For, вы можете присвоить целевому div уникальный идентификатор, используя тот же метод, который вы уже используете, например так:

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

Затем,в вашем цикле определите целевой div:

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

ОБНОВЛЕНИЕ

На основе кода, который вы разместили, исходя из предположения, что значение context вы передаетепередается в токен-значение id вашего маршрута, затем вы можете зафиксировать это значение в PartialView следующим образом:

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

Затем вы можете использовать id, чтобы назначить свой уникальный идентификатор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...