Asp.net 如何在不同的网页之间传递信息

Asp.net 如何在不同的网页之间传递信息,asp.net,asp.net-mvc-3,Asp.net,Asp.net Mvc 3,大家好,我正在尝试在不同的页面之间传递信息,但我不知道如何传递 我有这个表单,里面有Html.ActionLink <% using (Html.BeginForm("Save", "Envi")) {%> <%: Html.ValidationSummary(true)%> <div class="editor-label"> <%: Html.Label("Descri

大家好,我正在尝试在不同的页面之间传递信息,但我不知道如何传递

我有这个表单,里面有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的对话框),在那里我选择了一个图像

我想将表单中的所有数据传递到此页面。现在,当我再次显示表单时,我有了新数据,没有旧数据。 我该怎么做


谢谢。

建议您使用
TempData
字典。这将仅适用于下一个请求

引用MSDN:

动作方法可以将数据存储在控制器的TempDataDictionary中 对象,然后调用控制器的RedirectToAction方法 调用下一个操作。TempData属性值存储在中 会话状态。在 设置TempDataDictionary值可以从对象和 然后处理或显示它们。TempData的值一直持续到 读取或直到会话超时。将临时数据持久化到此 way启用重定向等场景,因为 TempData的可用性超出了单个请求


希望这能给你答案。

理想情况下,我认为表单应该提交给单个操作

因此,控制器可能如下所示:

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" />
}
索引
@使用(Html.BeginForm())
{
Description:@Html.EditorFor(m=>m.Description)

Image:@Html.EditorFor(m=>m.ImageName)

}
更改图像:

<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" />
}
ChangeImage
@使用(Html.BeginForm(“Image”,“Home”))
{
Image:@Html.EditorFor(m=>m.ImageName)

}

希望即使我使用了razor语法,也能感觉到这一点。

再次调用此视图的控制器需要将正确的模型传递给它,其中包含您希望它显示的数据。如果这还不够,还可以发布“保存”和“更改”视图的控制器代码。(总共应该有4个控制器方法,2个HttpGet和2个HttpPost)