【问题标题】:How to maintain the Textbox value one time after submit button in WebformsWebforms中提交按钮后如何维护一次Textbox值
【发布时间】:2016-12-26 04:53:23
【问题描述】:

实际上,我是通过 twitterizer 自动发送推文,并从不同 url 的 api JSON 数据中获取数据。但是,当我将 url 放入文本框中并启动项目时,它工作正常,我从文本框中获取数据,但是当进程转到 twitter 中的“应用程序授权”时,我按下“授权”按钮然后页面加载再次但当时 Request["textbox"] 为空。下面是前端代码。我将数据从“Frontsheet.aspx”之类的一页发布到 TwitterStrap.aspx

<form id="form1" runat="server" action="TwitterStrap.aspx" >
    <div style="position:absolute">
    <input type="text" id="text1" name="txtFirstName" placeholder="Enter Your First Name" />
        <br />
        <input id="Submit1" type="submit" value="submit" />
    </div>
    </form>

这是 TwitterStrap.aspx.cs 代码

protected void Page_Load(object sender, EventArgs e)
        {
            var text="";
            if (!IsPostBack)
            {
                 text = Request.Form["txtFirstName"];
            }

            using (var webClient = new System.Net.WebClient())
            {




                var jsonString = webClient.DownloadString(text);
                ProductsJsonModel Data = JsonConvert.DeserializeObject<ProductsJsonModel>(jsonString);
                List<Product> ProductsFromUrl = Data.products; // All of your products are here.

                // Your code
                Session["value"] = ProductsFromUrl;
                var title="";
                var cnt = ProductsFromUrl.Count;

                for (int i = 0; i < cnt; i++)
                {
                    title = ProductsFromUrl[0].title;

                }


                var oauth_consumer_key = "myLtWOTLGtLsjNsm15tUUpdEX";
                var oauth_consumer_secret = "uC9yHjPPV83Olvq0I8zt9eMwyucIpUcO70NduqNx0JuPQVyDZB";

                if (Request["oauth_token"] == null)
                {
                    OAuthTokenResponse reqToken = OAuthUtility.GetRequestToken(
                        oauth_consumer_key,
                        oauth_consumer_secret,
                        Request.Url.AbsoluteUri);

                    Response.Redirect(string.Format("http://twitter.com/oauth/authorize?oauth_token={0}",
                        reqToken.Token));

                }
                else
                {
                    string requestToken = Request["oauth_token"].ToString();
                    string pin = Request["oauth_verifier"].ToString();

                    var tokens = OAuthUtility.GetAccessToken(
                        oauth_consumer_key,
                        oauth_consumer_secret,
                        requestToken,
                        pin);

                    OAuthTokens accesstoken = new OAuthTokens()
                    {
                        AccessToken = tokens.Token,
                        AccessTokenSecret = tokens.TokenSecret,
                        ConsumerKey = oauth_consumer_key,
                        ConsumerSecret = oauth_consumer_secret
                    };

                    //TwitterResponse<TwitterStatus> response = TwitterStatus.Update(
                    //    accesstoken,
                    //    "Testing!! It works (hopefully).");

                    Twitterizer.TwitterResponse<TwitterStatus> response = TwitterStatus.Update(accesstoken, title, new StatusUpdateOptions() { UseSSL = true, APIBaseAddress = "http://api.twitter.com/1.1/" });

                    if (response.Result == RequestResult.Success)
                    {
                        Response.Redirect("https://twitter.com/");
                    }
                    else
                    {
                        Response.Redirect("https://twitter.com/");
                    }
                }

            }




            }

【问题讨论】:

  • If (!IsPostBack) 只会在表单未提交时触发。如果表单没有提交,您将没有第一个 SD t 名称的 request.form。
  • 乔尔谢谢,那我该怎么办?
  • 查看CodingYoshi提交的答案

标签: c# asp.net twitter webforms


【解决方案1】:

试试这个。我不完全确定您正在尝试什么,但下载的产品在会话中。因此,一旦提供了身份验证令牌,您就可以从会话中获取它:

protected void Page_Load(object sender, EventArgs e)
{
    var text = "";
    if (IsPostBack)
    {
        text = Request.Form["txtFirstName"];
    }

    string jsonString;

    using (var webClient = new System.Net.WebClient())
    {
        jsonString = webClient.DownloadString(text);
    }

    if (string.IsNullOrWhiteSpace(jsonString))
    {
        // Nothing to do so we return
        return;
    }


    ProductsJsonModel Data = JsonConvert.DeserializeObject<ProductsJsonModel>(jsonString);
    List<Product> ProductsFromUrl = Data.products; // All of your products are here.

    // Your code
    // All the products are in the value session variable so we can get it later
    Session["value"] = ProductsFromUrl;

    var oauth_consumer_key = "myLtWOTLGtLsjNsm15tUUpdEX";
    var oauth_consumer_secret = "uC9yHjPPV83Olvq0I8zt9eMwyucIpUcO70NduqNx0JuPQVyDZB";

    if (Request["oauth_token"] == null)
    {
        OAuthTokenResponse reqToken = OAuthUtility.GetRequestToken(
            oauth_consumer_key,
            oauth_consumer_secret,
            Request.Url.AbsoluteUri);

        Response.Redirect(string.Format("http://twitter.com/oauth/authorize?oauth_token={0}",
            reqToken.Token));

    }
    else
    {
        string requestToken = Request["oauth_token"].ToString();
        string pin = Request["oauth_verifier"].ToString();

        var tokens = OAuthUtility.GetAccessToken(
            oauth_consumer_key,
            oauth_consumer_secret,
            requestToken,
            pin);

        OAuthTokens accesstoken = new OAuthTokens()
        {
            AccessToken = tokens.Token,
            AccessTokenSecret = tokens.TokenSecret,
            ConsumerKey = oauth_consumer_key,
            ConsumerSecret = oauth_consumer_secret
        };

        //TwitterResponse<TwitterStatus> response = TwitterStatus.Update(
        //    accesstoken,
        //    "Testing!! It works (hopefully).");

        var prods = Session["value"];
        if (prods != null)
        {
            ProductsFromUrl = Session["value"] as List<Product>;

            var title = "";
            var cnt = ProductsFromUrl.Count;

            for (int i = 0; i < cnt; i++)
            {
                title = ProductsFromUrl[0].title;

            }
            Twitterizer.TwitterResponse<TwitterStatus> response =
                TwitterStatus.Update(accesstoken, title, new StatusUpdateOptions()
                { UseSSL = true, APIBaseAddress = "http://api.twitter.com/1.1/" });

            if (response.Result == RequestResult.Success)
            {
                Response.Redirect("https://twitter.com/");
            }
            else
            {
                Response.Redirect("https://twitter.com/");
            }

            // clear the session
            Session.Remove("value");
        }

    }
}

【讨论】:

  • 谢谢 Yoshi .. 但是当我在运行过程中单击“授权按钮”时,我仍然得到空值。
  • 是的,我按照您在回答中的描述进行了更改,但是在“应用程序授权”之后,var 推文显示为空值。
  • 你什么时候把它放到会话中的?到那时,它有价值吗?
  • 我将会话放在 if 条件之前,是的,它具有值。请检查我现在放置的代码
  • 请检查下面的回答部分
【解决方案2】:

CodingYoshi 请检查一下

using (var webClient = new System.Net.WebClient())
                {
                    var text = "";

                    text = Request.Form["txtFirstName"];
                    Session["Tweet"] = Request.Form["txtFirstName"];
                    var tweet = Session["Tweet"];

                    if (tweet != null)
                    {
                        // do whatever you need
                        text = tweet.ToString();
                        // clear the session
                        Session.Remove("Tweet");
                    }
                    if (!IsPostBack)
                    {
                        text = Request.Form["txtFirstName"];
                    }


                    var jsonString = webClient.DownloadString(text);

【讨论】:

  • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
猜你喜欢
  • 2013-10-02
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
相关资源
最近更新 更多