PDA

View Full Version : سوال: null شدن پارامتر فرستاده شده به url



پروگرامنویس
سه شنبه 11 تیر 1392, 15:52 عصر
درود
من تو صفحه پست یه بخش واسه گذاشتن دیدگاه ها گذاشتم.
سناریو:
هنگامیکه صفحه لود میشه با توجه به آی دی پست که از طریق url ارسال شده تمام رکوردهای پست به همراه دیدگاه های پست لود شده تو صفحه نشون داده میشه.
هرکاربری که کامنت میزاره و روی دکمه افزودن دیدگاه کلیک میکنه پس از مقایسه کد امنیتی دیدگاه در جدول اففزوده میشه و دوباره صفحه لود میشه.
واسه بار اول و دوم همه چی درست کار میکنه اما یهو پیکره زیر میاد و میگه پارامتر ارسالی به url نال هستش.یعنی توی رویداد دکمه افزودن دیدگاه مقدار Request["fid"] انگار از بین میره ومیپره.
اینم بگم من ابتدا متد لود رو بدون if نوشته بودم اما بخاطر همین مشکل اومدم دوباره توی متد دکمه دیدگاه fid رو دوباره توسط url به متد لود پاس دادم اما درست نشد!!
http://civ.id1945.com/up/2f446980d8e9.png

کدهای متد لود صفحه:


protected void Page_Load(object sender, EventArgs e)
{
File fl = new File();
Payam pm = new Payam();
//
if (Request["nc"] == null || Request["nc"].ToString() == String.Empty || Request["nc"].ToString() =="")
{
fl.ID = Int32.Parse(Request["fid"]);
pm.pstID = Request["fid"];
}
else
{
fl.ID = Int32.Parse(Request["nc"]);
pm.pstID = Request["nc"];
lblmsg.Text = "دیدگاه شما با پیروزی در سایت نگاشته شد!";
}

DataTable dt = fl.SelectPostsByID();
rptfle.DataSource = dt;
rptfle.DataBind();
DataTable dtc = pm.SelectCmntOk();
rptcmnt.DataSource = dtc;
rptcmnt.DataBind();
}



کدهای دکمه افزودن دیدگاه:


protected void btnCmnt_Click(object sender, EventArgs e)
{

if (Session["cpch"] != null )
{
string strc = Session["cpch"].ToString();
Session.Remove("cpch");
if (txtCapch.Text != strc)
{
lblmsg.Text = "کد امنیتی درست نیست!";
return;
}
else
{
Payam pm = new Payam();
pm.cName = txtName.Text;
pm.cCmnt = txtCmnt.Text;
pm.pstID = Request["fid"]; // آی دی پست مربوطه
pm.AddCmnt();
Response.Redirect("onefile.aspx?nc=" +Request["fid"]);
return;
}
}
else
{
btnCmnt_Click(null, null);
}

}

mehdi.mousavi
چهارشنبه 12 تیر 1392, 12:42 عصر
سلام.
این if ای که نوشته اید چیه جریانش؟

if (Request["nc"] == null || Request["nc"].ToString() == String.Empty || Request["nc"].ToString() =="")

جای if فوق، می تونید از TryParse استفاده کنید:

int nc = 0;
if (int.TryParse(Request.QueryString["nc"], out nc))
{
//Successfully parsed, so let's use it...
//blah blah blah
}


بدین ترتیب، اگر اون پارامتر Parse بشه، یعنی یه مقدار عددی برای n در QueryString تعیین شده، اگر نه یعنی nv یا تعریف نشده، یا empty هستش، یا عددی نیست... در مرحله بعد، شما دارید مقدار nc رو چک می کنید، اما داخل if از مقدار fid استفاده می کنید!!! خوب طبیعی هستش. این دو ارتباطی به هم ندارن! فارق از اینکه nc در QueryString وجود داره یا نه، شما نمی تونید تصور کنید که fid حتما در Query String تعیین شده و یک ضرب برای Parse اون اقدام کنید. شما باید تک تک ورودی ها رو بررسی کنید و در صورت Valid بودن، اونوقت اقدام به Parse اونها کرده و ازشون استفاده کنید.

موفق باشید.

پروگرامنویس
چهارشنبه 12 تیر 1392, 16:41 عصر
این if ای که نوشته اید چیه جریانش؟

if (Request["nc"] == null || Request["nc"].ToString() == String.Empty || Request["nc"].ToString() =="")

جای if فوق، می تونید از TryParse استفاده کنید:

int nc = 0;
if (int.TryParse(Request.QueryString["nc"], out nc))
{
//Successfully parsed, so let's use it...
//blah blah blah
}




سپاس از راهنماییتون، راستش من nc رو واسه این گذاشتم که وقتی فرم لود میشه معلوم شه که واسه بار اول داره صفحه بالا میاد یا کاربر نظرشو داده و دوباره صفحه داره رفرش میشه(توسط دکمه افزودن دیدگاه).اینکار رو هنگامی کردم که فهمیدم وقتی صفحه بعد از ذخیره دیدگاه دوباره لود میشه fid از بین میره!! که البته این nc اضافه بود.یعنی امروز اومدم بجای

Response.Redirect("onefile.aspx?nc=" +Request["fid"]);

Response.Redirect("onefile.aspx?fid=" +Request["fid"]);
نوشتم و دیگه if بخش لود صفحه هم پاک کردم و مشکل حل شد!! کلا گمون کنم یه مشکل منطقی بود که چند روز الافش شدم :اشتباه::متفکر: