在讨论安全性时,我的团队中的开发人员询问是否有办法判断viewstate是否已被篡改.我很尴尬地说我不知道答案.我告诉他我会发现,但我想我会在这里给某人一个机会先回答.我知道有一些自动验证,但如果没有启用事件验证,有没有办法手动执行?
我正在寻找ASP.NET MVC源代码,但没有找到ViewState从应用程序中删除的位置.
(ViewState 不仅被禁用,它被删除了应用程序中的所有页面)
谢谢!
更新:
是否可以删除Viewstate隐藏字段?
我是.net程序员,但对mvc来说是新手.
我创建了一个新的mvc页面,上面有一个简单的表单 - 2个文本框和一个提交按钮.发布后,它转到我的服务器端方法,其中用户信息输入到数据库中,然后我想将用户返回到相同的确切形式但再次清空.
当我使用"返回视图("索引",新的myIndexObject());" 它将用户返回到与表单相同的页面,但是已经填写的信息就好像控件上有ViewState一样.我怎么摆脱这个?
在Fiddler 2中,哪里可以看到ViewState的总大小超出了响应的总大小(Body列中的字节数)?
谢谢!
我有一个viewstate存储来自SharePoint的数据查询,
数据可能非常巨大,
我想在viewstate中存储的原因是为了稍后对查询数据进行过滤.
但是,我不确定它是否会导致任何性能问题,因为有很多数据(行和列),因为我知道viewstate将消耗客户端浏览器的内存.
那么实际上可以查看多少数据存储?
所以我的页面上有一个列表框和一些文本字段.通过文本字段,我可以将一个项目添加到我的列表框中(单击按钮,它将其添加到一个私有列表,然后将其设置为ViewState,并再次对数据列进行数据绑定).我的列表框也位于更新面板中,该按钮的Click事件会触发该面板.问题:我的Viewstate在回发时保持为null,因此每次都会重置.
一些代码:
private const string VIEW_INGREDIENTS = "IngredientsList";
private const string VIEW_LANGUAGE = "CurrentLanguage";
private List<IngredientData> _ingredientsList;
protected void Page_PreInit(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
if (ViewState[VIEW_INGREDIENTS] != null)
{
_ingredientsList = (List<IngredientData>) ViewState[VIEW_INGREDIENTS];
}
}
else
{
// prepare ingredient lists
_ingredientsList = new List<IngredientData>();
}
}
protected void Page_Load(object sender, EventArgs e)
{
lstIngredients.DataSource = _ingredientsList;
lstIngredients.DataTextField = "Text";
lstIngredients.DataValueField = "Name";
lstIngredients.DataBind();
}
protected void btnAddIngredient_Click(object sender, EventArgs e)
{
_ingredientsList.Add(new IngredientData { Name = …Run Code Online (Sandbox Code Playgroud) 我已经找到了减少ViewState的方法:
但是,由于我所处的情况,我需要最快捷,最有效的方法来减少ViewState的大小.我正在研究的遗留系统很臃肿,并且在多个回发中通常具有800Kb +的ViewState.
例如,我很确定在多个帖子上填充100多个项目的下拉列表是其中一个罪魁祸首,对吗?
任何建议/意见将不胜感激.
编辑1 完全禁用ViewState似乎不可行.它打破了所有控件,其中有很多控件,使页面无法使用.如果这是最好的方法,我该如何处理所有损坏的控件?
实际上我使用视图状态将值从一个页面发送到另一个页面,如果是,那么我们可以这样做吗.我只想用viewstate做其他技术,比如coockie或querystring?
我有一个自定义控件,我需要将数组集合存储在视图状态.数组集合是圆形刻度.怎么进一步?
public class CircularGauge : WebControl
{
private CircularGaugeProperties model = new CircularGaugeProperties();
private List<CircularScales> scales = new List<CircularScales>();
[Browsable(true)]
[Bindable(true)]
[Category("Circular Gauge Properties")]
[Description("Scale values")]
[JsonProperty("scales")]
[MergableProperty(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[PersistenceMode(PersistenceMode.InnerProperty)]
public List<CircularScales> Scales
{
get
{
if (scales == null)
{
scales = new List<CircularScales>();
}
return scales;
}
}
}
Run Code Online (Sandbox Code Playgroud)
其中圆形刻度具有数组集合作为内部属性.然后我如何需要绑定Circularscales中的属性以进行视图状态维护.