0

新しいパラメーターを URL に設定する問題をよりよく理解し、それを取得したいと思います。

var ParaValue = Request.QueryString["parameterName"];

URL がある場合: "http://www.myWebsite.aspx?UserName=Alice"

上記の例で取得します

string uName = Request.QueryString["UserName"].ToString();

しかし、値を変更したい場合はどうすればよいですか?たとえば、make UserName = "Ralf"

  • 再編集

ボタンが押されたとき、押されたボタンへの参照を保持するパラメータ「状態」があります。状態の値は=「なし」でした。今はimg_button1に設定したいと思います。

私は実際のimgbutton idさえ送信していません

テスト/参照のためだけにハードコーディングしています

ボタン 1 の指定されたイベントのプロシージャによって要求されたイベントの段階にいることがわかりました。

イベントがトリガーされたときimg_button2

次に、状態を「img_button2」などに設定したい

4

3 に答える 3

3

調査を行った後(投稿で親切に回答をマークできませんでした)、このスタックオーバーフローページで遭遇した2つのオプションをテストしました:

最初のオプション (Ahmad Mageed によって提供された) 正常に動作することをテストしました。読みやすさは理解しやすかったです(私はまだasp.netの「トリック」に慣れていないため)

次に、結果を達成するために実際にリダイレクトする必要がないという方法で著しく改善されたアプローチであるアンナカタによる回答が続きました-クエリ文字列が変更されました

いろいろ遊んだ後、私はannakataのアプローチに従い、変更された QueryString パラメーターと値を持つ redirerion オプションも使用するヘルパー メソッドを作成することにしました。

public void QuerStrModify(string CurrQS_ParamName, string NewQs_paramName, string NewPar_Value, bool redirectWithNewQuerySettings = false)
{

    // reflect to readonly property 
    PropertyInfo isReadOnly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);

    // make collection editable 
    isReadOnly.SetValue(this.Request.QueryString, false, null);

    // remove 
    this.Request.QueryString.Remove(CurrQS_ParamName);

    // modify 
    this.Request.QueryString.Set(NewQs_paramName, NewPar_Value);

    // make collection readonly again 
    isReadOnly.SetValue(this.Request.QueryString, true, null);
    string FullUrl = Request.Url.AbsolutePath;
    if (redirectWithNewQuerySettings)
    {
        Response.Redirect(string.Join("?", FullUrl, this.Request.QueryString));
    }

}

asp.netのdevelopmetの経験がかなり少ない人にとっては非常に役立つと思うので、私のバージョンの正解として投稿しました。同じソリューションを探している他の人に役立つことを願っています.

私は証明された才能ではないと述べたので、それをさらに改善してください..まだ。

于 2012-09-24T09:25:14.377 に答える
0

ここでの問題は、「信頼できる情報源」の問題です。HttpRequest.QueryStringによって公開されるNameValueCollection、クエリ文字列を公開します。クエリ文字列は呼び出し元によって提供されたものであるため、変更しないでください。アプリケーションに UserName クエリ文字列引数があるが、テストなどのために変更する必要がある場合は、必要に応じて代替ソースから取得できるメソッドでラップします。例えば:

// A very simple container
public static class SystemInfo
{
    // This would be an instance of QueryStringUserInfo
    // by default but could be changed for testing.
    public IUserInfo UserInfo
    {
        get;
        private set;
    }
}

// An interface that contains the user operations 
public interface IUserInfo
{
    string UserName { get; }
}

// Get the user name from the query string. This would
// be the default.
public class QueryStringUserInfo: IUserInfo
{
    public string UserName
    {
        get
        {
            return Request.QueryString["UserName"].ToString();
        }
    }
}

// Get the user name from the query string. This would
// be the default.
public class TestUserInfo: IUserInfo
{
    public string UserName
    {
        get
        {
            return "Foo";
        }
    }
}

そのため、ユーザー名 (または任意の情報) に対して QueryString を直接呼び出すのではなく、SystemInfo のプロパティを呼び出します (恐ろしい名前ですが、要点はわかります)。コードが Web ページの外部で使用されている場合やテスト用に使用されている場合など、設定のソースを変更できます。

于 2012-09-22T15:05:30.113 に答える
0

使用できますHttpModule

public class SimpleRewriter : System.Web.IHttpModule
{

    HttpApplication _application = null;

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new System.EventHandler(context_BeginRequest);
        _application = context;
    }

    public void Dispose()
    {
    }

    private void context_BeginRequest(object sender, System.EventArgs e)
    {
        string requesturl =
            _application.Context.Request.Path.Substring(0,
                _application.Context.Request.Path.LastIndexOf("//")
            );

        string[] parameters = requesturl.Split(new char[] { '/' });

        if (parameters.Length > 1)
        {
            string firstname = parameters[1];
            string lastname = parameters[2];


            //Here you can modify your parameters or your url

            _application.Context.RewritePath("~/unfriendly.aspx?firstname=" +
                firstname + "&lastname=" + lastname);

        }
    }
}

リンク : http://msdn.microsoft.com/en-us/library/ms972974.aspx

登録中 :

<configuration>
  <system.web>
    <httpModules>
      <add name="SimpleRewriter" type="SimpleRewriter"/>
     </httpModules>
  </system.web>
</configuration>

リンク: http://msdn.microsoft.com/en-us/library/ms227673%28v=vs.100%29.aspx

于 2012-09-22T15:04:07.530 に答える