【发布时间】:2021-09-02 14:17:12
【问题描述】:
在 ASP.NET-Core 3.1 中,我有两个名为 Home 和 Index 的控制器和两个名称相同的视图。
我想在主控制器和索引视图之间传递数据**。我尝试使用ViewBag 和ViewData,但我无法解决问题。
【问题讨论】:
-
你能分享你试过的代码吗?
标签: c# asp.net-core asp.net-core-mvc
在 ASP.NET-Core 3.1 中,我有两个名为 Home 和 Index 的控制器和两个名称相同的视图。
我想在主控制器和索引视图之间传递数据**。我尝试使用ViewBag 和ViewData,但我无法解决问题。
【问题讨论】:
标签: c# asp.net-core asp.net-core-mvc
这里有两个主要选项:
【讨论】:
你可以试试:
HttpContext.Session.SetString(SessionKeyName, "The Value You Want To Store");
参考:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-3.1
您还需要先设置会话:
public void ConfigureServices(IServiceCollection services)
{
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromSeconds(10);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});
services.AddControllersWithViews();
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseSession();
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
endpoints.MapRazorPages();
});
}
【讨论】:
您确实应该传递模型而不是使用 viewbag 或 viewdata。
定义如下模型:
public class ViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
在您的 HomeController 中创建一个 IActionResult,如下所示:
public IActionResult Home()
{
ViewModel viewmodel = new ViewModel
{
FirstName = "Alex",
LastName = "Leo"
};
return View("/Views/Index/Index.cshtml",viewmodel);
}
您的 Index.cshtml 将采用传递的模型,并将其定义如下:
@model ViewModel
@{
ViewData["Title"] = "Index Page";
}
<label>@Model.FirstName</label>
<label>@Model.LastName</label>
在这个例子中,当应用程序启动时 - 索引页面将与传递的模型一起显示
【讨论】: