2023-02-17 423
在下面的RedirectToAction中,我想通过一个viewmodel.如何将模型传递给重定向?
我设置一个断点来检查模型值以验证模型是否正确创建.它是正确的,但结果视图不包含模型属性中找到的值.
//
// model created up here...
//
return RedirectToAction("actionName", "controllerName", model);
asp.net mvc 4 rc
RedirectToAction返回对客户端浏览器的302响应,因此浏览器将在响应的位置标题值中对URL进行新的Get请求来浏览器.
如果要将简单的lean-flat视图模型传递给第二个动作方法,可以使用此超载 RedirectToAction方法.
protected internal RedirectToRouteResult RedirectToAction(
string actionName,
string controllerName,
object routeValues
)
RedirectToAction将对象传递(rutevalues)转换为查询字符串并将其追加到URL(从我们传递的前两个参数生成),并将在 location 响应的标题.
让我们假设你的视图模型就像这个
public class StoreVm
{
public int StoreId { get; set; }
public string Name { get; set; }
public string Code { set; get; }
}
和您在第一个操作方法中,您可以将此对象传递给RedirectToAction方法,如此
var m = new Store { StoreId =101, Name = "Kroger", Code = "KRO"};
return RedirectToAction("Details","Store", m);
此代码将在浏览器中向浏览器发送302响应,其中位置标题值为
Store/Details?StoreId=101&Name=Kroger&Code=KRO
假设您的Details Action方法的参数是StoreVm,将QueryString Param值正确映射到参数的属性.
public ActionResult Details(StoreVm model)
{
// model.Name & model.Id will have values mapped from the request querystring
// to do : Return something.
}
TempData["NewCustomer"] = model;
return RedirectToAction("Index", "Users");
并再次在GET操作方法中读取它.
public ActionResult Index()
{
var model=TempData["NewCustomer"] as Customer
return View(model);
}
TempData使用场景后面的Session对象来存储数据.但是一旦读取数据,数据就会终止.
Rachel写了一个很好的博客 post 解释何时使用tempdata/ViewData.值得读.
在ASP.NET核心中,您无法通过Tempdata的复杂类型.您可以通过string,int,Guid等的简单类型.
如果您绝对希望通过Tempdata传递复杂类型对象,则您有2个选项.
1)将您的对象序列化为字符串并通过该字符串.
以下是使用JSON.NET将对象序列化为字符串的样本
var s = Newtonsoft.Json.JsonConvert.SerializeObject(createUserVm);
TempData["newuser"] = s;
return RedirectToAction("Index", "Users");
现在在Index操作方法中,从tempdata读取此值,并将其反序列化为您的CreateUserViewModel类对象.
public IActionResult Index()
{
if (TempData["newuser"] is string s)
{
var newUser = JsonConvert.DeserializeObject<CreateUserViewModel>(s);
// use newUser object now as needed
}
// to do : return something
}
2)将简单类型的字典设置为tempdata
var d = new Dictionary<string, string>
{
["FullName"] = rvm.FullName,
["Email"] = rvm.Email;
};
TempData["MyModelDict"] = d;
return RedirectToAction("Index", "Users");
并稍后阅读它
public IActionResult Index()
{
if (TempData["MyModelDict"] is Dictionary<string,string> dict)
{
var name = dict["Name"];
var email = dict["Email"];
}
// to do : return something
}
另一种方法是在会话中存储它.
var s = JsonConvert.SerializeObject(myView);
HttpContext.Session.SetString("myView", s);
并返回
string s = HttpContext.Session.GetString("myView");
myView = JsonConvert.DeserializeObject<MyView>(s);
以上所述是小编给大家介绍的我如何将一个模型与RedirectToAction结合起来?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/34193.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态