Cho*_*ong 30 asp.net asp.net-mvc
我想发一些问题ASP.Net MVC.我不熟悉Web开发,但我被分配到项目的Web部分.我们正在执行以下操作:首先,我们为人员数据创建get&set属性:
public class Person
{
public int personID {get;set;}
public string personName {get;set;}
public string nric {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
登录后,我们将数据放在一个类Person对象中,我们使用RedirectToAction如下:
return RedirectToAction("profile","person",new { personID = Person.personID});
Run Code Online (Sandbox Code Playgroud)
它正常工作,但参数显示在URL中.我怎样才能隐藏它们?我还可以隐藏动作名称吗?请通过一些例子以正确的方式指导我.
RPM*_*984 42
该参数显示在URL中,因为这是第三个参数RedirectToAction- 路由值.
默认路由是 {controller}/{action}/{id}
所以这段代码:
return RedirectToAction("profile","person",new { personID = Person.personID});
Run Code Online (Sandbox Code Playgroud)
将产生以下URL /路由:
/人/资料/ 123
如果你想要一个更干净的路线,比如这样(例如):
/人/ 123
创建一个新路线:
routes.MapRoute("PersonCleanRoute",
"people/{id}",
new {controller = "Person", action = "Profile"});
Run Code Online (Sandbox Code Playgroud)
并且您的网址应该是干净的,如上所述.
或者,你可能不喜欢在所有使用的ID,你可以使用一些其他的唯一标识符 - 就像一个昵称.
所以URL可以是这样的:
人/ rpm1984
要做到这一点,只需改变你的路线:
routes.MapRoute("PersonCleanRoute",
"people/{nickname}",
new {controller = "Person", action = "Profile"});
Run Code Online (Sandbox Code Playgroud)
你的行动方法:
public ActionResult Profile(string nickname)
{
}
Run Code Online (Sandbox Code Playgroud)
和你的RedirectToAction代码:
return RedirectToAction("profile","person",new { nickname = Person.nickname});
Run Code Online (Sandbox Code Playgroud)
那是你的追求吗?
如果您不希望参数显示在地址栏中,则需要在重定向之间将其保留在服务器上的某个位置.实现这一目标的好地方是TempData.这是一个例子:
public ActionResult Index()
{
TempData["nickname"] = Person.nickname;
return RedirectToAction("profile", "person");
}
Run Code Online (Sandbox Code Playgroud)
现在,在Profile操作中,您将重定向以从TempData以下位置获取它:
public ActionResult Profile()
{
var nickname = TempData["nickname"] as string;
if (nickname == null)
{
// nickname was not found in TempData.
// this usually means that the user directly
// navigated to /person/profile without passing
// through the other action which would store
// the nickname in TempData
throw new HttpException(404);
}
return View();
}
Run Code Online (Sandbox Code Playgroud)
在幕后TempData使用Session的存储,但它会重定向后会自动驱逐,因此该值可能只能使用一次是你需要的东西:商店,重定向,取.