【发布时间】:2018-08-13 17:52:13
【问题描述】:
我不知道如何通过重定向发送 DTO。
我已经尝试了在this Question 和this documentation 中可以找到的所有内容。
我怎样才能做到这一点?
以下是我的尝试和结果的记录:
public ActionResult Create(ComRuleCompoundKeyDto ruleKey)
{
var dto = new ComRuleOverrideDto()
{
Company = 42
};
发送空 dto:
//var routeValues = new RouteValueDictionary
//{
// { "ruleKey", ruleKey },
// { "dto", dto },
//};
//return RedirectToAction(nameof(MaintainOverride), routeValues);
发送 StupidDto 填充为 null:
//var routeValues = new RouteValueDictionary(new StupidDto
//{
// ruleKey = ruleKey,
// dto = dto
//});
//return RedirectToAction(nameof(MaintainOverride), routeValues);
发送填充了默认值的 dto:
//ControllerContext.RouteData.Values.Add("ruleKey", ruleKey);
//ControllerContext.RouteData.Values.Add("dto", dto);
//return RedirectToAction(nameof(MaintainOverride));
发送空 dto:
//return RedirectToAction(nameof(MaintainOverride), new { ruleKey, dto });
System.InvalidOperationException:未找到视图“创建”或其主视图,或者没有视图引擎支持搜索到的位置:
//return MaintainOverride(ruleKey, dto);
return null;
}
public ActionResult MaintainOverride(ComRuleCompoundKeyDto ruleKey, ComRuleOverrideDto dto)
{
var currencies = _srv.GetAllCurrenciesUsedByDealers().Select(x => x.CurrencyCode);
var custTypes = _srv.GetAllCustomerTypes();
var unitIds = _srv.GetUnitIds();
var vm = new OverridesViewModel(currencies, custTypes, unitIds, ruleKey, dto);
return View(vm);
}
public class StupidDto
{
public ComRuleCompoundKeyDto ruleKey;
public ComRuleOverrideDto dto;
}
【问题讨论】:
-
使用 TempData 在函数之间传递数据
-
@FawadBinTariq 来自链接的问题,“目前我将 ID 存储在 tempdata 中,但是当您在返回后按 f5 再次刷新页面时,tempdata 消失并且页面崩溃。”如果可能的话,我想避免这种情况。
-
是否可以在你想要的地方制作dto,而不是通过。
-
@AsifRaza 无法制作必须通过的规则密钥。而且我打算重复使用相同的 MaintainOverride 操作进行编辑和创建,所以至少我仍然需要发送 ID。
-
@Shyju 链接的重复问题的答案有“new StoreVm { Id=storeId, Name=store.Name,Code=store.Code};”。这些是原始类型。当我尝试对复杂类型进行相同操作时,它们被发送为 null。或者答案只是不能那样做,我必须将我的 DTO 中包含的所有类型扩展到它们的原语?
标签: c# asp.net-mvc redirect parameters parameter-passing