我正在使用带有Razor视图引擎的MVC 3.我想在部分视图中的ViewBag中设置一些值,并希望在_Layout.cshtml中检索这些值.例如,当您设置默认的ASP.NET MVC 3项目时,您将在"/ Views/Shared"文件夹中获得_Layout.cshtml文件.在_Layout.cshtml中,页面标题设置如下:
<title>@ViewBag.PageTitle</title>
Run Code Online (Sandbox Code Playgroud)
然后在"/Views/Home/About.cshtml"视图中修改ViewBag的内容:
@{
ViewBag.Title = "About Us";
}
Run Code Online (Sandbox Code Playgroud)
这很好用.呈现"关于"视图时,页面标题为"关于我们".所以,现在我想在我的About视图中渲染一个Partial视图,我想修改我的Partial视图中的ViewBag.Title.( "/Views/Shared/SomePartial.cshtml")
@Html.Partial("SomePartial")
Run Code Online (Sandbox Code Playgroud)
在此部分视图中,我有以下代码:
@{
ViewBag.Title = "About Us From The Partial View";
}
Run Code Online (Sandbox Code Playgroud)
当我调试这段代码时,我看到ViewBag.Title被设置为"关于我们",然后在Partial视图中我看到它被重置为"关于我们从部分视图",但是当代码命中_Layout.cshtml时它会去回到"关于我们".
这是否意味着如果在部分视图中修改了ViewBag的内容,那么这些更改将不会在主视图(About.cshtml)或_Layout.cshtml中显示(可访问)?
提前致谢!
只是想确保我在这里假设一些愚蠢的东西,在ASP .Net Web应用程序中实现单例模式时,静态变量作用域仅适用于当前用户会话,对吧?如果第二个用户正在访问该站点,那么它是一个不同的内存范围......?
我有一个组件需要static在每个线程之前存储值.它是一个通用组件,可以在许多场景中使用,而不仅仅在ASP.NET中使用.
我正在考虑使用该[ThreadStatic]属性来实现我的目标.假设它在ASP.NET场景中也能正常工作,因为我假设每个Request都在自己的线程中调用.
经过一些研究后,我发现Scott Hanselman 撰写的这篇博客文章说[ThreadStatic]在ASP.NET中使用时要小心.
然而,大多数评论(在帖子下面)都不同意斯科特写的,说请求总是在一个线程中运行,并且该线程不会被另一个请求同时使用.这也是我所相信的,但我很乐意在这里对你的专家有一些看法.
我可以在Web应用程序中使用静态变量吗?什么是静态的替代品?当我在页面中使用静态变量并且多个用户使用该应用程序时,它会产生冲突数据(不正确的数据).
使用静态成员的限制是什么?
静态成员是否在内存中共享?
我使用静态Web方法使用jQuery调用了一个代码隐藏方法.那个web方法调用是成功的,但是当我在该方法中绑定网格视图时会产生一个错误,该错误无法在静态方法中使用控件.我们可以解决这个问题.
public static DataTable GetDataTable()
{
DataSet ds = new DataSet();
SqlCommand cmd = new SqlCommand("StoredProcedurename");
String constr = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;
SqlConnection con = new SqlConnection(constr);
string Startdate = DateTime.Now.ToString("yyyy-MM-dd");
string EndDate = Convert.ToDateTime(Startdate).AddMonths(-6).ToString("yyyy-MM-dd");
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@FromDate", Startdate);
cmd.Parameters.AddWithValue("@ToDate", EndDate );
cmd.Connection = con;
SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.Fill(ds);
//i want to use same dataset to bind with the grid
gridToBind.DataSource = ds.Tables[1];
gridToBind.DataBind();
txtStatus.Text="Data Received";
//above three lines throws error.
return ds.Tables[1];
}
Run Code Online (Sandbox Code Playgroud)
并获得错误"非静态字段,方法或属性需要对象引用"
我向MVC4网站添加了一些新功能。我刚刚添加了一个全局静态类和一个全局变量来保存一个值,该值在用户访问网站期间的某个时刻确定,并将在以后用作条件。
然后我想到,我不确定在这种情况下静态值的全局性。
我是否必须将全局值指定为会话变量?
还是无论如何,站点的每个用户都可以在自己的会话中访问它,而我不必担心一个用户将其设置为一个值,而另一个用户可以访问此设置值。
在Asp.Net中,在什么情况下我将使用单例,因为大多数工作可以通过检查它是否为空来完成Session/Cache/Static.
请参阅我之前的问题
asp.net ×6
c# ×5
.net ×3
asp.net-mvc ×1
datagridview ×1
partial ×1
razor ×1
session ×1
singleton ×1
static ×1
threadstatic ×1
view ×1
viewbag ×1