【问题标题】:JSON variable not updating on postbackJSON 变量在回发时未更新
【发布时间】:2019-01-23 15:50:16
【问题描述】:

我有一个表单来编辑数据库值。我在页面加载时使用ClientScriptManager.RegisterClientScriptBlock 注册了一个json 变量,然后使用它来检查表单的更改并提示用户保存。然后在保存按钮单击事件中,我重新执行注册 json 变量的代码,以便它包含用户刚刚保存的更改。

我遇到的问题是 json 变量没有更新以反映回发后对表单的更改。只有刷新页面后,json 变量才会更新。

protected void Page_Load(object sender, EventArgs e)
{
    Property p = Property.GetPropertyById(id);
    PopulateForm(p);
    CreateJson(p);
}

protected void btnSave_Click(object sender, EventArgs e)
{
    Property p = Property.GetPropertyById(id);
    p.Price = txtPrice.Text.Trim();

    p.Save();
    CreateJson(p);
}

private void CreateJson(Property p)
{
    StringBuilder JSONtext = new StringBuilder();
    JSONtext.Append("<script type='text/javascript'>");
    JSONtext.Append("var property = ");
    JSONtext.Append("{");
    JSONtext.Append("\"price\":\"");
    JSONtext.Append(p.Price.ToString());
    JSONtext.Append("};");
    JSONtext.Append("</script>");

    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "jsonVariable", JSONtext.ToString());
}

我正在尝试做的事情可能吗?

【问题讨论】:

  • 你怎么看 - 一些代码可能会或可能不会帮助得到答案?
  • 有人有什么想法吗?
  • btnSave_Click 中添加PopulateForm(p);CreateJson(p); 之后
  • 我认为您还应该在Page_Load 上添加if Page.IsPostBack 检查,并且仅在其false 时加载这些值
  • 它不会解决您的问题 - 但您在脚本中的价格值后面缺少一个右引号。

标签: c# asp.net json registerclientscriptblock


【解决方案1】:

试试这个

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack == false)
    {
      Property p = Property.GetPropertyById(id);
      PopulateForm(p);
      CreateJson(p);
    }
}

protected void btnSave_Click(object sender, EventArgs e)
{
    Property p = Property.GetPropertyById(id);
    p.Price = txtPrice.Text.Trim();

    p.Save();
    CreateJson(p);
    PopulateForm(p);
}

它在您创建 json 后执行 PopulateForm(p),并且在 Page_Load 中它仅在它不是 PostBack 时运行

【讨论】:

  • 这会起作用的原因是 RegisterClientScriptBlock 的工作方式:客户端脚本由其键和类型唯一标识。具有相同键和类型的脚本被认为是重复的。页面中只能注册一个具有给定类型和密钥对的脚本。尝试注册已注册的脚本不会创建该脚本的副本。来自文档:[docs.microsoft.com/en-us/dotnet/api/… (docs.microsoft.com)
猜你喜欢
  • 2017-12-20
  • 2020-11-26
  • 2023-04-08
  • 1970-01-01
  • 2018-10-07
  • 1970-01-01
  • 2020-03-19
  • 1970-01-01
相关资源
最近更新 更多