我尝试在里面显示TempData带有HTML balise 的列表.有可能解释应答器而不仅仅是显示它吗?
这是用来说明我想要的代码示例.
控制器:
List<string> ls = new List<string>();
ls.Add("<div> First div </div>");
ls.Add("<div> Another div </div>");
ls.Add("<div> Another div again </div>");
TempData.Add("ModelLs", ls);
Run Code Online (Sandbox Code Playgroud)
查看:
var ls = (List<string>)TempData["ModelLs"];
foreach (string str in ls)
{
@str
}
Run Code Online (Sandbox Code Playgroud)
而且我想在我的页面上显示3个"真正的"div(而不是3 "<div> .... </div>").我怎样才能做到这一点 ?
我有一个网站正在玩,以获取Razor Pages的困扰。我有一个奇怪的情况,我不确定正在发生什么或如何解决。我正在使用[TempData]在重定向时传递消息。该应用程序在本地完美运行。一旦发布到Azure,我将添加一个新项目并添加该项目,我被重定向到索引页面,但我从未看到TempData消息。
这是我的索引页面:
public class IndexModel : PageModel
{
private readonly TheFishRoom_MVC_Core.Data.FishRoomDbContext _context;
public IndexModel(TheFishRoom_MVC_Core.Data.FishRoomDbContext context)
{
_context = context;
}
public IList<Coral> Coral { get; set; }
[TempData]
public string Message { get; set; }
public bool ShowMessage => !string.IsNullOrEmpty(Message);
public async Task OnGetAsync(string searchString)
{
if (!String.IsNullOrEmpty(searchString))
{
Coral = await _context.Corals.Where(s => s.Name.Contains(searchString)).ToListAsync();
}
else
{
Coral = await _context.Corals.ToListAsync();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的创建页面:
namespace TheFishRoom_MVC_Core.Pages.Corals
{
[Authorize(Roles = "Admin")]
public class CreateModel : PageModel
{ …Run Code Online (Sandbox Code Playgroud) 我们使用ASP.Net MVC TempData在页面刷新之间存储表单数据.我们在页面上有一个按钮,允许用户执行某个操作.如果用户单击此按钮一次,则可以正常工作.如果他们单击按钮两次(允许),我们将丢失TempData数据.无论用户单击按钮多少次,我们都需要确保保留TempData数据.顺便说一句,该按钮激活URL.Action,并使用Ajax.
在ASP.NET MVC 2中,TempData值会持续到会话结束或读取为止.用微软的话说 ......
TempData的值一直存在,直到读取或会话超时为止.以这种方式保持TempData可以启用重定向等方案,因为TempData中的值可以在单个请求之外使用.
我以为我理解了这一点,但我在我的应用程序中遇到了异常行为,其中有一个TempData值可用且它不应该可用.通常,我有一个控制器,其中包含一系列操作,其中第一个操作设置一个TempData值,接下来的几个操作读取然后设置该TempData值,最后一个操作读取TempData值.下面的伪代码......
[HttpPost]
public ActionResult Step1()
{
TempData["bar"] = foo;
return RedirectToAction("Step2");
}
public ActionResult Step2()
{
var foo = TempData["bar"];
TempData["bar"] = foo;
return View();
}
[HttpPost]
public ActionResult Step2()
{
var foo = TempData["bar"];
TempData["bar"] = foo;
return RedirectToAction("Step3");
}
public ActionResult Step3()
{
var foo = TempData["bar"];
TempData["bar"] = foo;
return View();
}
[HttpPost]
public ActionResult Step3()
{
var foo = TempData["bar"]; …Run Code Online (Sandbox Code Playgroud) 我想使用TempData在Post和后续重定向之间存储消息,但TempData始终为空.
我有BaseContoller为传递TempData提供了一些基础设施.简化的代码如下所示:
public abstract class BaseController : Controller
{
public const string AuditMessagesKey = "AuditMessages";
private List<InformationMessage> _informationMessages = new List<InformationMessage>();
protected BaseController()
{
// I also tried this in overriden Initialize
ViewData[AuditMessagesKey] = GetAuditMessages();
}
protected void AddAuditMessage(InformationMessage message)
{
if (message == null)
return;
_informationMessages.Add(message);
}
protected override void OnResultExecuting(ResultExecutingContext filterContext)
{
base.OnResultExecuting(filterContext);
if (filterContext.Result is RedirectToRouteResult)
{
// I see that messages are stored into TempData
TempData[AuditMessagesKey] = _informationMessages;
// This also doesn't help
// TempData.Keep(AuditMessagesKey);
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个自定义动作过滤器,它从过滤器上下文中获取传入模型,将其添加到tempdata,然后执行"其他内容".
我的动作方法如下所示:
[HttpPost]
[MyCustomAttribute]
public ActionResult Create(MyViewModel model)
{
// snip for brevity...
}
Run Code Online (Sandbox Code Playgroud)
现在,我要添加model到TempData,后模型结合已经踢并转化形式收藏价值成MyViewModel.
我怎么做?
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.Controller.ViewData.ModelState.IsValid)
return;
var model = filterContext.????; // how do i get the model-bounded object?
filterContext.TempData.Add(someKey, model);
}
Run Code Online (Sandbox Code Playgroud) c# tempdata model-binding custom-action-filter asp.net-mvc-3
我从多个页面调用控制器,并使用returnUrl参数返回正确的调用位置:
public ActionResult EmailOrder(int id, string returnUrl)
{
var message = "The order has been emailed";
if (!string.IsNullOrEmpty(returnUrl)) return Redirect(returnUrl);
return RedirectToAction("Details", new { id, message });
}
Run Code Online (Sandbox Code Playgroud)
使用时如何将附加信息传递回视图Redirect(url)?在上面的示例中,我希望能够在有值message时传回。returnUrl
我想将一个post动作中的两个值返回到a中的视图RedirectToAction.TempData[]似乎是理想的选择,因为数据仅用于在用户保存后显示成功消息.
我想在成功消息中显示用户刚保存的图像的小缩略图和已保存项目的标题.
目前我正在传递所有数据 new MvcHtmlString
TempData["SaveMsg"] = new MvcHtmlString("<img src=" + model.ImageUrl + " //> <h3//>" + model.Name + " has been saved.<//h3//> " ) ;
Run Code Online (Sandbox Code Playgroud)
我想把它作为一个发送 object[]
TempData["SaveMsg"] = new object[]{model.ImageUrl , model.Name}
Run Code Online (Sandbox Code Playgroud)
然后我就可以将对象传递给一个HtmlHelper并编写消息显示的条件.
我只是不知道如何访问视图中的对象
@TempData["SaveMsg"][0] // (O.o) // Error Cannot apply indexing with
// [] to an expression of type 'object'
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?
我最近一直在与TempData一个令人困惑的案件打交道:
假设TempData在以下操作中创建了:
public ActionResult MyAction1()
{
//...
myTempData = TempData["myTempData"];
//..
}
Run Code Online (Sandbox Code Playgroud)
并预期将在以下操作中使用:
public ActionResult MyAction2()
{
//...
TempData["myTempData"] = myTempData;
//..
}
Run Code Online (Sandbox Code Playgroud)
我了解,如果我调用MyAction2下一个请求,则该TempData值将被删除。但是,如果我调用其他操作,而不是MyAction2在下一个请求时会TempData被删除?如果可以的话,是否有任何技巧可以确保它在会话结束之前一直存在?
谢谢大家
我有提供全局错误处理的自定义中间件。如果捕获到异常,则应使用参考编号记录详细信息。然后我想将用户重定向到错误页面并只显示参考号。我的研究表明 TempData 应该是理想的,但它似乎只能从控制器上下文中访问。我尝试将参考编号添加到HttpContext.Items["ReferenceNumber"] = Guid.NewGuid();
但此值通过重定向丢失。
中间件如何通过重定向传递信息?我是否只需要将数字放在查询字符串中?
model-view-controller tempdata asp.net-core asp.net-core-middleware
tempdata ×10
asp.net-mvc ×7
c# ×2
ajax ×1
asp.net ×1
asp.net-core ×1
html ×1
razor ×1
razor-pages ×1
view ×1