我正在尝试将多个参数从操作A传递到操作B。
public IActionResult A(string name){ // some code }
public IActionResult B() { return RedirectToAction("A", new {name = "John" }); }
这很好。但是我想要实现的是这些参数不会显示在url中,因为当我确实喜欢上面的示例时,我的url看起来像http://myapp.com/users?name=John
。我希望网址清晰无?然后是字符串。
我尝试使用TempData[]
,它在本地工作,但是当我将应用程序发布为Azure时,它无法工作。
尝试过ViewData[]
,但发现重定向后它变成空的。
我尝试使用javascript拆分url,但其中有一些不必要的重载。
是否可以通过javascript或.net或其他方式完成此操作? 谢谢
答案 0 :(得分:0)
我不明白您为什么不喜欢在您的网址中使用...?name=John&p2=val2
,而您的操作正在接受GET
方法...
无论如何,如果您在同一控制器中,则可以编写此代码(这不是一个好习惯)
public IActionResult A(string name){}
public IActionResult B(){return A("world");}
或
使用TempData:在这里,您的问题将是 TempData[]
无法在天蓝色上工作。所以您应该像这样设置Cookie同意
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => false;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
请记住,您必须清除浏览器导航数据(包括cookie),还必须接受应用程序来存储/收集cookie。
答案 1 :(得分:-1)
可能不是最好的方法,但可能是一个会话变量?然后在A中清除它。
public IActionResult A() {
string name = (string) Session["AsNameFromB"];
Session["AsNameFromB"] = null;
//Set in view model if you are using one.
}
public IActionResult B() {
Session["AsNameFromB"] = "John";
return RedirectToAction("A");
}
您也可以发布数据而不是GET。