PDA

View Full Version : توضیح علل یک Error



haamidd
جمعه 21 فروردین 1394, 00:03 صبح
سلام، چرا این اررور ظاهر می شود و برای چی هست؟

و چرا وقتی من تگ زیر رو بالای صفحه aspxم اضافه میکنم مشکل رفع میشه؟
EnableEventValidation="False"
اصلا این قطعه کد بالا چی هست که وقتی من اضافش میکنم مشکل حل میشه؟

ممنون میشم اگه توضیح بدین

130173

alireza_s_84
جمعه 21 فروردین 1394, 00:13 صبح
سلام، چرا این اررور ظاهر می شود و برای چی هست؟

و چرا وقتی من تگ زیر رو بالای صفحه aspxم اضافه میکنم مشکل رفع میشه؟
EnableEventValidation="False"


اصلا این قطعه کد بالا چی هست که وقتی من اضافش میکنم مشکل حل میشه؟

ممنون میشم اگه توضیح بدین

130173

با فعالسازی این خصوصیت شما به ASP.NET تاکید میکنید که رخدادهای یک کنترل رو در زمان پست بک یا کال بک ، با رخدادهای زمان رندر اونها در واسط کاربری یکی باشه. یعنی اگر شما یک dropdown داشته باشید که آیتمهای اون 4 مورد باشه بعد در سمت کلاینت با کمک جاوا اسکریپت آیتم پنجمی به اون اضافه کنید در زمان ارسال داده ها اگر این خاصیت فعال باشه شما یک پیغام خطا دریافت میکنید. در واقع سورس HTML تولید شده در زمان رندر کنترل نباید مغایرتی با داده های ارسال شده در زمان PostBack یا CallBack داشته باشه.
یکی دیگه از موارد رخداد این خطا میتونه بایند کردن یک کنترل به داده ها قبل از رندر شدن اون باشه.
در هرصورت بهتره برای جلوگیری از سواستفاده و دستکاری داده ها این خاصیت فعال باشه.
کد صفحه مورد نظر رو بذارین تا بهتر بشه محل رخداد این خطا رو تشخیص داد.

kamranetemadi
جمعه 21 فروردین 1394, 12:18 عصر
دوست عزیز قسمتی که با رنگ جگری نوشه کاملا توضیح داده که چرا این خطا رخ داده و اون قطعه کد چی هست
موفق باشید

haamidd
جمعه 21 فروردین 1394, 16:43 عصر
TicketList.aspx


<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPages/Managers.Master" AutoEventWireup="true" CodeBehind="TicketList.aspx.cs" Inherits="UI.User.Manager.TicketList"EnableEventValidation="false" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<div class="row">
<div class="col-xs-12">
<div class="panel panel-primary">
<div class="panel-heading">
<div class="panel-title">لیست تیکت های گذشته</div>

<div class="panel-options">
<a href="#" data-rel="collapse"><i class="entypo-down-open"></i></a>
<a href="#" data-rel="reload"><i class="entypo-arrows-ccw"></i></a>
</div>
<br style="clear: both;" />
<hr />
<div id="top-table" class="top-table">
<div class="table-search float-left">
<div>
<div style="width: 40px; float: right;">
<label for="field-1" class="col-sm-3 control-label">جستجو</label>
</div>
<div style="width: 300px; float: left;">
<input type="text" class="form-control" id="field-1" placeholder="متن مورد نظر خود را تایپ کنید">
</div>
</div>

</div>
<div class="table-print">
<div id="export-table" class="float-left padding-left">
<button type="button" class="btn btn-white">پرینت</button>
<button type="button" class="btn btn-white">اکسل</button>
</div>
</div>

</div>
<br style="clear: both;" class="margin-bottom" />
<hr />
</div>
<table class="table table-bordered datatable" id="table-2">
<thead>
<tr>
<th>شماره تیکت</th>
<th>وضعیت تیکت</th>
<th>الویت</th>
<th>موضوع</th>
</tr>
</thead>
<tbody>
<asp:Repeater ID="rptTicketList" runat="server">
<ItemTemplate>
<tr>
<td><%# Eval("Id") %></td>
<td>
<asp:Button ID="btnStatus" CommandArgument='<%# Eval("Id") %>' runat="server" Text='<%# (Convert.ToBoolean(Eval("IsClosed"))==true)?"بسته":"باز" %>' OnCommand="btnStatus_Command" CssClass="btn btn-sm" />
</td>
<th><%# (Convert.ToInt32(Eval("Levell"))==1)?"کم":(Convert.ToInt32(Eval("Levell"))==2)?"متوسط":"زیاد" %></td></th>
<td><a href="TicketDetail.aspx?tid=<%# Eval("Id") %>"><%# Eval("Subjects") %></a></td>
</tr>
</ItemTemplate>
</asp:Repeater>

</tbody>
</table>
</div>
</div>
</div>
<br />
<ul class="pagination">
<li><a href="#"><i class="entypo-left-open-mini"></i></a></li>
<li class="active"><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li><a href="#">6</a></li>
<li class="disabled"><a href="#"><i class="entypo-right-open-mini"></i></a></li>
</ul>
<br />
</asp:Content>




TicketList.aspx.cs


using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace UI.User.Manager
{
public partial class TicketList : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection con = null;
SqlDataAdapter da = null;
DataTable dt = null;
// Authenticate
if (Session["UserId"] == null || Session["UserId"].ToString() == "")
{
Response.Redirect("/User/Guest/Login.aspx");
}
else
{
con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["con"].ConnectionString);
da = new SqlDataAdapter("select Id from users where BuildingId is null and Id = @Id", con);
da.SelectCommand.Parameters.AddWithValue("@Id", Convert.ToInt32(Session["UserId"]));
dt = new DataTable();
da.Fill(dt);

if (dt.Rows.Count == 0)
{
Response.Redirect("/User/Guest/Login.aspx");
}
}
//
//
con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["con"].ConnectionString);
da = new SqlDataAdapter("select Id from buildings where UserId = @UserId", con);
da.SelectCommand.Parameters.AddWithValue("@UserId", Convert.ToInt32(Session["UserId"]));
dt = new DataTable();
da.Fill(dt);

con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["con"].ConnectionString);
da = new SqlDataAdapter("select Subjects,Levell,IsClosed,Tickets.Id,Buildings.Titl e from tickets inner join Buildings on Tickets.BuildingId = Buildings.Id where BuildingId = @BuildingId", con);
da.SelectCommand.Parameters.AddWithValue("@BuildingId", dt.Rows[0]["Id"]);
dt = new DataTable();
da.Fill(dt);

rptTicketList.DataSource = dt;
rptTicketList.DataBind();

}
protected void btnStatus_Command(object sender, CommandEventArgs e)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["con"].ConnectionString);
SqlCommand cmd = new SqlCommand("update Tickets set IsClosed = 1 where Id = @Id", con);
cmd.Parameters.AddWithValue("@Id", Convert.ToInt32(e.CommandArgument));
con.Open();
cmd.ExecuteNonQuery();
con.Close();

Page_Load(null, null);
}
}
}

alireza_s_84
شنبه 22 فروردین 1394, 23:00 عصر
Page_Load(null, null);

در رویداد کلیک چرا این متد رو فراخونی کردین؟؟؟ لزومی نداره اینطور صریح و با مقادیر null رویداد Load صفحه رو فراخونی کنید. هدفتون رو از این خط بنویسید تا راه حل درستی رو پیشنهاد بدم.

haamidd
سه شنبه 25 فروردین 1394, 22:57 عصر
Page_Load(null, null);

در رویداد کلیک چرا این متد رو فراخونی کردین؟؟؟ لزومی نداره اینطور صریح و با مقادیر null رویداد Load صفحه رو فراخونی کنید. هدفتون رو از این خط بنویسید تا راه حل درستی رو پیشنهاد بدم.

رفرش کردن صفحه

چون میخوام اطلاعات سایت وقتی یک چیزی مثلا پاک میشه اتوماتیک یکبار هم اطلاعات تازه سازی بشه و یا همون رفرش بشه

alireza_s_84
چهارشنبه 26 فروردین 1394, 00:34 صبح
رفرش کردن صفحه

چون میخوام اطلاعات سایت وقتی یک چیزی مثلا پاک میشه اتوماتیک یکبار هم اطلاعات تازه سازی بشه و یا همون رفرش بشه
از کد زیر استفاده کنید:
Response.Redirect("~/Page.aspx");

به جای Page.aspx اسم صفحه مورد نظر رو بنویسید

haamidd
پنج شنبه 17 اردیبهشت 1394, 19:32 عصر
مشکل برطرف نشد

من هنوز زمانی که EnableEventValidation را true میکنم...
مثلا در زمانی که دکمه btnStatus را میزنم و رویداد btnStatus_Command اجرا می شود اررور مذکور رخ میدهد...





بنده تعریف اولیه شمارو مطالعه کردم و منظور شمارا درک کردم، با گفته های شما هیچگاه اطلاعات صفحه نباید تغییر کند (تا اررور مذکور رخ ندهد) و اطلاعات صفحه در زمان لود و پست بک باید یکی باشد! که این غیر ممکن هست! چون ما یک رویداد رو اجرا میکنیم تا یک تغییراتی در صفحه بدهیم دیگه؟!!!!

اینجاست که برای من باز یکم گنگ هست! و نمیدانم که اررور بالا مربوط به کدام قسمت هست و چطور میتوان آن را بصورت امن برطرف کرد

fakhravari
پنج شنبه 17 اردیبهشت 1394, 20:28 عصر
!ispostback