c# - 是否可以在不使用 ASP.NET MVC 项目中的参数的情况下通过 RedirectToAction 传递数据?

标签 c# asp.net asp.net-mvc asp.net-mvc-4

在我的 ASP.NET MVC 项目 Controller 中,我有一个

return RedirectToAction("CreatePerson", "Home")

这个 View 是一个创建一个人并且工作正常的表单。但是,我想 RedirectToAction 并使用从为系统创建用户的表单收集的数据预填充表单。

如何将 CreateUser 表单中的数据传递到 CreatePerson 表单中?

我知道我可以使用参数,但如果大多数时候我调用 CreatePerson View 而不需要这些参数,这真的是最好的方法吗。

如能提供正确方向的任何帮助,我们将不胜感激。

最佳答案

您不能使用 RedirectAction 发送数据。那是因为您正在执行 301 重定向,然后返回到客户端。

所以最好使用 TempData

假设您将拥有具有以下属性的 createperson 模型:

public class CreatePersonData
{
     public string name {get; set;}
     public string address {get; set;}
}

现在填充model并存储在TempData

CreatePersonData person=new CreatePersonData();
person.name="SomeName";
person.address="SomeAddress";
TempData["person"]=person;

return RedirectToAction("CreatePerson", "Home")

现在在接收时,只需从 tempdata 接收它,并将填充的 model 传递给 view

public ActionResult CreatePerson()
{
    CreatePersonData person=new CreatePersonData()
    var loadPerson= TempData["person"];
    person = loadPerson;
    return View(person);
}

更新

由于@StephenMuecke 强调使用 TempData 丢失数据,您可能需要对 TempData 使用 .Keep.Peek 以保留 future 请求的值(value)

例如:

使用 .Peek

//PEEK value so it is not deleted at the end of the request
var loadPerson= TempData.Peek("person");

或使用.Keep

//get value marking it from deletion
var loadPerson = TempData["person"];
//later on decide to keep it
TempData.Keep("person");

或者如@Stephen 所说,只需传递 id 并从 database

中选择 user

例如:

return RedirectToAction("CreatePerson", "Home", new { ID = User.ID });

现在在您的 CreatePerson ActionResult 中,只需从数据库中获取它,如下所示:

public ActionResult CreatePerson(int ID)
{
    CreatePersonData person=new CreatePersonData();
    var user=(from u in tbl_user select u where u.ID=ID);
    person.name=user.name;
    person.address=user.address;
    return View(person);
}

更新 2

您可以将上述两种方法结合起来,例如将数据存储在 TempData 中并将 IDrouteValues 一起传递并检查 TempData 不为空,然后回退到使用 ID 方法检索数据。

例如:

public class CreatePersonData
{
     public string Id{get; set;}
     public string name {get; set;}
     public string address {get; set;}
}

public ActionResult CreatePerson(int ID)
{
    CreatePersonData person=new CreatePersonData();
    var loadPerson=(CreatePersonData)TempData.Peek("person"); //cast the object from TempData
    if(loadPerson!=null && loadPerson.Id==ID)
    { 
        person=loadPerson;
    }
    else
    {
         var user=(from u in tbl_user select u where u.ID=ID);
         person.name=user.name;
         person.address=user.address;
    }
    return View(person);
}

关于c# - 是否可以在不使用 ASP.NET MVC 项目中的参数的情况下通过 RedirectToAction 传递数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32174093/

相关文章:

c# - 用 OLEDB 读取 Excel 文件?

asp.net - 简单整数正则表达式

asp.net-mvc - 有没有用于 MVC 链接编译时检查的工具?

asp.net-mvc - 带有字形图标和不同字体文本的 ASP.NET Actionlink

c# - 在引用的方法中注入(inject)一个要调用的方法

c# - Azure WebJob QueueTrigger 得到DeleteMessage后怎么办?

c# - razor - 检查参数是否为 null 并且列表是否有参数

c# - 从 Azure 表中删除数据

c# - 在 Internet Explorer 8 和 9 中播放非 pcm (gsm) ".wav"-文件

C#、搜索字符串、ASP