Как передавать информацию между разными веб-страницами - PullRequest
1 голос
/ 10 ноября 2011

Привет всем. Я пытаюсь передать информацию между разными страницами, но не знаю как.

У меня есть эта форма с Html.ActionLink внутри

<% using (Html.BeginForm("Save", "Envi"))
    {%>
        <%: Html.ValidationSummary(true)%>

            <div class="editor-label">
                <%: Html.Label("Description:")%>
            </div>
            <div class="editor-field">
                <%: Html.TextBox("info", lp.Description)%>
     ...
            <div>
                <%: Html.ActionLink("Change Image", "ChangeImg", "Envi", new {id=lp}, new {id="cambio"})%>
   ...
            <p>
                <input type="submit" value="Save" name="<%= lp.Id %>"/>
            </p>
    <% } %>
<% } %>

Когда я нажимаюHtml.ActionLink Я показываю другую страницу (диалог с fancyBox), где я выбираю изображение.

Я хочу передать все данные из формы на эту страницу.Теперь, когда я снова показываю форму, у меня есть новые данные, а не старые данные.Как мне это сделать???

Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2011

В идеале, я считаю, что форма должна отправляться в одно действие.

Таким образом, контроллер может выглядеть следующим образом:

public class HomeController : Controller
{
    public ViewResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Index(ItemModel itemModel, string submit)
    {
        //I'm not sure why I need this but the fields display with empty results on my machine otherwise
        ModelState.Clear();

        if (submit == "edit")
        {
            this.TempData.Add("item", itemModel);
            return View("ChangeImage", new ImageModel { ImageName = itemModel.ImageName }); 
        }
        else
        {
            //perform save here
            return RedirectToAction("ViewAfterSavePerformed");
        }
    }

    [HttpPost]
    public ViewResult Image(ImageModel imageModel)
    {
        ItemModel itemModel = (ItemModel)this.TempData["item"];
        itemModel.ImageName = imageModel.ImageName;
        return View("Index", itemModel);
    }
}

При следующих моделях представления:

public class ItemModel
{
    public string Description { get; set; }

    public string ImageName { get; set; }
}

public class ImageModel
{
    public string ImageName { get; set; }
}

И следующие виды:

Индекс:

<h2>Index</h2>

@using (Html.BeginForm())
{
    <p>Description: @Html.EditorFor(m => m.Description)</p>
    <p>Image: @Html.EditorFor(m => m.ImageName)</p>
    <input type="submit" name="submit" value="edit" />
    <input type="submit" name="submit" value="save" />
}

Изменить изображение:

<h2>ChangeImage</h2>

@using (Html.BeginForm("Image", "Home"))
{
    <p>Image: @Html.EditorFor(m => m.ImageName)</p>

    <input type="submit" name="submit" value="save image" />
}

Надеюсь, это должно ощущаться, хотя я использовал синтаксис бритвы.

0 голосов
/ 10 ноября 2011

Вам предлагается использовать словарь TempData. Это будет доступно только для следующего запроса.

Цитирование из MSDN:

Метод действия может хранить данные в TempDataDictionary контроллера объект, прежде чем он вызывает метод контроллера RedirectToAction для вызвать следующее действие. Значение свойства TempData хранится в состояние сеанса Любой метод действия, который вызывается после Значение TempDataDictionary установлено может получить значения из объекта и затем обработайте или отобразите их. Значение TempData сохраняется до читается или до истечения времени ожидания сеанса. Сохранение TempData в этом способ включает сценарии, такие как перенаправление, потому что значения в TempData доступны за один запрос.

Надеюсь, что это даст ваш ответ.

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