Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 回发时未更新JSON变量_C#_Asp.net_Json_Registerclientscriptblock - Fatal编程技术网

C# 回发时未更新JSON变量

C# 回发时未更新JSON变量,c#,asp.net,json,registerclientscriptblock,C#,Asp.net,Json,Registerclientscriptblock,我有一个表单来编辑数据库值。我在页面加载时使用ClientScriptManager.RegisterClientScriptBlock注册一个json变量,然后使用它检查表单的更改并提示用户保存。在SaveButtonClick事件中,我重新执行注册json变量的代码,以便它包含用户刚刚保存的更改 我遇到的问题是json变量没有更新以反映回发后表单的更改。只有在刷新页面之后,json变量才会更新 protected void Page_Load(object sender, EventArgs

我有一个表单来编辑数据库值。我在页面加载时使用
ClientScriptManager.RegisterClientScriptBlock
注册一个json变量,然后使用它检查表单的更改并提示用户保存。在SaveButtonClick事件中,我重新执行注册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());
}
受保护的无效页面加载(对象发送方,事件参数e)
{
Property p=Property.GetPropertyById(id);
流行型(p);
(p);
}
受保护的无效btnSave\u单击(对象发送方,事件参数e)
{
Property p=Property.GetPropertyById(id);
p、 Price=txtPrice.Text.Trim();
p、 Save();
(p);
}
私有void CreateJson(属性p)
{
StringBuilder JSONtext=新建StringBuilder();
JSONtext.Append(“”);
追加(“var property=”);
附加(“{”);
追加(“\”价格\“:\”);
Append(p.Price.ToString());
JSONtext.Append(“};”);
JSONtext.Append(“”);
Page.ClientScript.RegisterClientScriptBlock(this.GetType(),“jsonVariable”,JSONtext.ToString());
}
我想做的事情可能吗?

试试看

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)
,在
页面中加载
时,它只会运行,如果它不是
回发

您怎么看?一些代码可能会或可能不会有助于获得答案?有人有什么想法吗?添加
PopulateForm(p)
btnSave_中,在
CreateJson(p)之后单击
我认为您还应该添加一个
if页面。IsPostBack
检查
页面_Load
,并且仅在其
为false时加载这些值,这不会解决您的问题-但是您的脚本中的价格值后缺少一个结束引号。这将起作用的原因是因为RegisterClientScriptBl的方式ock工作:客户端脚本由其密钥和类型唯一标识。具有相同密钥和类型的脚本被视为重复的脚本。只有一个具有给定类型和密钥对的脚本可以在页面中注册。尝试注册已注册的脚本不会创建脚本的副本。从文档:[()