我有一个应用程序,我在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;
}
此代码隐藏方法不允许我将接收的参数分配给文本框。请帮帮我。感谢。
答案 0 :(得分:2)
后面的代码访问修改控件的唯一时间是在页面生命周期中。页面呈现后,页面不再连接到服务器。
将控件从WebMethod引用到另一个函数的移动代码将无法工作,因为没有控件。您必须从Web方法返回数据,并使用JavaScript将数据放入DOM中。
为了更清楚,我会说你不能使用[WebMethod]为文本框分配值,因为[WebMethod]不运行ASP.Net页面生命周期。您需要使用JavaScript将值分配给文本框。
答案 1 :(得分:0)
将文本框的ClientIDMode
属性设置为Static
。这将确保您为文本框设置的任何ID也将是客户端上的id
。这样id
将是可预测的,您可以从JavaScript中引用它。
然后在执行ajax后的客户端代码中,您可以更新JavaScript中的值。
document.getElementById("yourControlId").value = "whatever";