Используя MVC3, как установить значение TempData, когда пользователь нажимает элемент управления HTML.ActionLink? - PullRequest
1 голос
/ 16 сентября 2011

У меня есть цикл foreach, который генерирует строку таблицы для каждого элемента в массиве бизнес-объектов в представлении BusinessList.

Вот мой бизнес-объект:

    public class Business
    {
        public long BusinessID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
    }

и вот цикл Rachor foreach:

@foreach (var item in Model)
{
    <tr>
        <td>
            <div class="editor">
                <div class="editor-label">
                    @Html.DisplayFor(modelItem => item.Name)
                </div>
            </div>
        </td>
        <td>
            <div class="editor">
                <div class="editor-label">
                    @Html.DisplayFor(modelItem => item.Description)
                </div>
            </div>
        </td>
        <td>
            @Html.ActionLink("Edit", "EditBusiness")
        </td>
    </tr>
}

То, что я хочу сделать, это захватить BusinessID, связанный со строкой, в которой пользователь нажимает кнопку «Изменить». Значение BusinessID должно быть доступно для представления EditBusiness. Я бы предпочел не использовать строку запроса. Есть ли способ установить значение ViewData, TempData или ViewBag, когда пользователь нажимает ссылку «Изменить»?

Ответы [ 4 ]

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

Невозможно установить значения ViewData, TempData или ViewBag на стороне клиента (в браузере), поскольку они являются свойствами объекта представления ASP.NET MVC на стороне сервера. Для того, что вам нужно, вы можете использовать метод ActionLink, например:

@Html.ActionLink("Edit", "EditBusiness", new { Model.BusinessID })

Таким образом, вы будете называть действие http://<your_host>/Edit/EditBusiness/<BusinessId>

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

Измените метод действия "EditBusiness", чтобы принять параметр BusinessID.

public ActionResult EditBusiness(string BusinessID )

и измените свою ссылку на эту

@Html.ActionLink("Edit", "EditBusiness", new { BusinessID = Model.BusinessID })
1 голос
/ 16 сентября 2011

Вместо использования передачи значения в качестве строки запроса вы можете опубликовать значение, изменив ссылку редактирования на форму со скрытым полем для идентификатора и кнопкой отправки (стилизованной под вашу ссылку редактирования)

@using (Html.BeginForm("EditBusiness")) {
    @Html.HiddenFor(m => m.Id)
    <input type="submit" value="Edit" />
}

Или вы можете отправлять сообщения через ajax.

0 голосов
/ 16 сентября 2011

Прежде всего вы должны создать действие, как это:

public ActionResult Edit(int id) {
    //....

  return View();
}

Затем в представлении (файл .cshtml) добавьте следующее:

@Html.ActionLink("Edit", "Business", new { id = Model.BusinessID })

Убедитесь, что имя параметра метода (Edit ( int id )) совпадает с « id = Model.BusinessID», что означает «id».

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