PDA

View Full Version : سوال: مشکل با Url ReWriting بعد از کلیک بر روی دکمه



mehdi-ghafari
جمعه 26 اسفند 1390, 13:37 عصر
سلام دوستان
من با روش urlRewriting آدرسهام رو شبیه سازی کردم به شکل زیر :
این حقیقی :

~/admin/index.aspx?module=slider&type=editImage&lang=fa-IR&id=1

اینم شبیه سازی اون :

~/admin/fa-IR/slider-editImage&id=1

همه چی درست کار میکنه. ولی وقتی روی یکی از دکمه ها کلیک میکنم خطای زیر رو میده :

'~/modules/index.aspx?module=slider/editImage,IR.ascx' is not a valid virtual path.

بنظر شما چرا ؟
این رو هم اضاف کنم که من از تو مسترپیج ماژول ها رو (یوزرکنترلها) میریزم تو یک PleaceHolder و این خطا هم از اون میگیره. میگه آدرس معتبر نیست چونکه بعد از کلیک ر روی دکمه حالش خراب میشه.

لطفا یه راهنمایی بفرمائید. ممنون

mehdi-ghafari
جمعه 26 اسفند 1390, 21:00 عصر
دوستان راه حلی بنظرتون نمیرسه ؟
آخه من اکثر مباحث مربوطه رو بررسی کردم ولی کسی این مشکل رو نداشته تا حالا ظاهراً:افسرده:
چکار کنم ؟ :اشتباه:

alonemm
شنبه 27 اسفند 1390, 10:50 صبح
باسلام:

اگر از دات نت ورژن 4 استفاده میکنید از Routing استفاده کنید..! (در تالار جستجو کنید ).

mehdi-ghafari
شنبه 27 اسفند 1390, 10:56 صبح
ممنون از توجهتون.
خیر من از دات نت 2 استفاده میکنم. و همونجور که در بالا عرض کردم با پیاده سازی آدرس ها هیچ مشکلی ندارم و بطور صحیح دارن کار میکنن.
تنها مشکل بعد از کلیک بر روی دکمه ها هست.:متفکر:

mehdi-ghafari
چهارشنبه 30 فروردین 1391, 20:18 عصر
دوستان عزیز من که راه حلی پیدا نکردم شما چطور؟
از مدیران محترم تقاضامندیم به یاری ما بشتابند
سپاس

dorparasti
چهارشنبه 30 فروردین 1391, 21:13 عصر
شاید این راه مشکلت رو حل کنه ( مطمئن نیستم )
اول پوشه app_browsers رو به پروژه تون اضافه کنید و یک فایل .browser در اون ایجاد کنید و کد زیر رو در اون قرار بدید :


<browsers>

<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.HtmlControls.HtmlForm"
adapterType="FormRewriterControlAdapter" />
</controlAdapters>
</browser>

</browsers>



بعد اونرو به نام Form.browser ذخیره کنید .
بعد در پوشه app_code یک فایل به نام FormRewriter.cs ایجاد کنید و کد زیر رو در اون قرار بدید :


using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;


public class FormRewriterControlAdapter : System.Web.UI.Adapters.ControlAdapter
{

protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
base.Render(new RewriteFormHtmlTextWriter(writer));
}

}

public class RewriteFormHtmlTextWriter : HtmlTextWriter
{

public RewriteFormHtmlTextWriter(HtmlTextWriter writer)
: base(writer)
{
this.InnerWriter = writer.InnerWriter;
}

public RewriteFormHtmlTextWriter(System.IO.TextWriter writer)
: base(writer)
{
base.InnerWriter = writer;
}


public override void WriteAttribute(string name, string value, bool fEncode)
{
// If the attribute we are writing is the "action" attribute, and we are not on a sub-control,
// then replace the value to write with the raw URL of the request - which ensures that we'll
// preserve the PathInfo value on postback scenarios


if ((name == "action"))
{
HttpContext Context = default(HttpContext);
Context = HttpContext.Current;


if (Context.Items["ActionAlreadyWritten"] == null)
{
// Because we are using the UrlRewriting.net HttpModule, we will use the
// Request.RawUrl property within ASP.NET to retrieve the origional URL
// before it was re-written. You'll want to change the line of code below
// if you use a different URL rewriting implementation.

value = Context.Request.RawUrl;

// Indicate that we've already rewritten the <form>'s action attribute to prevent
// us from rewriting a sub-control under the <form> control

Context.Items["ActionAlreadyWritten"] = true;

}

}

base.WriteAttribute(name, value, fEncode);

}

}



آدرس مطلب اصلی (http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx)