如何在asp.net中从静态方法设置值到文本框?

时间:2016-05-07 16:48:15

标签: c# asp.net

我有一个应用程序,我在ajax post方法上获得了一些价值并发送到后面的[WebMethod]静态方法代码。但我无法将值分配给页面的文本框。这是我的代码:

    [WebMethod]
    public static string copyData(string name, string msg, string sing_cal1, string timepick, string timepickst, string sing_cal4, string step)
    {
        if (step == "3")
        {
            if (HttpContext.Current != null)
            {
                Page page = (Page)HttpContext.Current.Handler;
                TextBox txtCampaignNameEditC = (TextBox)page.FindControl("txtCampaignNameEdit");
                TextBox txtMsgEditC = (TextBox)page.FindControl("txtMsgEdit");
                TextBox txtSentFromC = (TextBox)page.FindControl("txtSentFrom");
                Label lblScheduledTimeC = (Label)page.FindControl("lblScheduledTime");


                txtCampaignNameEditC.Text = name; // Here I am getting error as "Object reference not set to an instance of an object."
            }

        }

        return "";
    }

<script type="text/javascript">
    $(document).ready(function () {
        $('#wizard').smartWizard({ onLeaveStep: leaveAStepCallback, onFinish: onFinishCallback });
        function leaveAStepCallback(obj) {
            var step_num= obj.attr('rel');
            var name = $("#<%= txtCampaignName.ClientID  %>").val();
            var msg = $("#<%= txtMessage.ClientID  %>").val();
            var cal1 = $("#<%= single_cal1.ClientID  %>").val();
            var timepicks = $("#<%= txtTimePick.ClientID  %>").val();
            var pickst = $("#<%= txtTimePickST.ClientID  %>").val();
            var cal4 = $("#<%= single_cal4.ClientID  %>").val();
            $.ajax({
                type: "POST",
                url: "CreateCampaign.aspx/copyData",
                data: '{name: "' + name + '", msg: "' + msg + '", sing_cal1: "' + cal1 + '", timepick: "' + timepicks + '", timepickst: "' + pickst + '", sing_cal4: "' + cal4 + '", step: "'+ step_num +'"}',


                contentType: "application/json; charset=utf-8",
                dataType: "json"
            });
            return true;
  }

此代码隐藏方法不允许我将接收的参数分配给文本框。请帮帮我。感谢。

2 个答案:

答案 0 :(得分:2)

后面的代码访问修改控件的唯一时间是在页面生命周期中。页面呈现后,页面不再连接到服务器。

将控件从WebMethod引用到另一个函数的移动代码将无法工作,因为没有控件。您必须从Web方法返回数据,并使用JavaScript将数据放入DOM中。

为了更清楚,我会说你不能使用[WebMethod]为文本框分配值,因为[WebMethod]不运行ASP.Net页面生命周期。您需要使用JavaScript将值分配给文本框。

有关如何使用JavaScript获取和设置文本框值的教程,您可以查看:thisthis

答案 1 :(得分:0)

将文本框的ClientIDMode属性设置为Static。这将确保您为文本框设置的任何ID也将是客户端上的id。这样id将是可预测的,您可以从JavaScript中引用它。

然后在执行ajax后的客户端代码中,您可以更新JavaScript中的值。

document.getElementById("yourControlId").value = "whatever";