我试图修改现有的代码(由我的前任编写),该代码将撇号(与测试一起输入文本框)更改为"Å"符号,同时将其显示回文本框中。我怎样才能改变这一点?当我试图从代码中删除符号时,我无法获得结果返回/看到文本框中保存的文本,并且它给出了错误消息。
这里是网格视图控件的代码,在其中显示结果,这是我应该点击的地方,看看输入什么数据:
protected void grdActivities_RowDataBound(Object sender, GridViewRowEventArgs e)
{
DataRowView dr = e.Row.DataItem as DataRowView;
if (e.Row.RowType == DataControlRowType.DataRow)
{
Label lblPerson = (Label)e.Row.FindControl("lblPerson");
if (dr["Name"] != DBNull.Value)
lblPerson.Text = dr["Name"].ToString();
Label lblDate = (Label)e.Row.FindControl("lblDate");
if (dr["service_outcome_date"] != DBNull.Value)
lblDate.Text = dr["service_outcome_date"].ToString();
Label lblReasonforContact = (Label)e.Row.FindControl("lblReasonforContact");
if (lblReasonforContact != null)
{
if (dr["reason_for_contact_desc"] != DBNull.Value)
{
lblReasonforContact.Text = dr["reason_for_contact_desc"].ToString();
}
if (dr["service_desc"] != DBNull.Value)
{
lblReasonforContact.Text = dr["service_desc"].ToString();
}
if (dr["health_screening_recommendations_desc"] != DBNull.Value)
{
lblReasonforContact.Text = dr["health_screening_recommendations_desc"].ToString();
}
}
Label lblServiceDeliveryTime = (Label)e.Row.FindControl("lblServiceDeliveryTime");
if (dr["service_delivery_time"] != DBNull.Value)
lblServiceDeliveryTime.Text = dr["service_delivery_time_desc"].ToString();
Label lblcreatedby = (Label)e.Row.FindControl("lblcreatedby");
if (dr["createdby"] != DBNull.Value)
lblcreatedby.Text = dr["createdby"].ToString();
Label lblServiceType = (Label)e.Row.FindControl("lblServiceType");
if (lblServiceType != null)
{
if (dr["contact_desc"] != DBNull.Value)
lblServiceType.Text = dr["contact_desc"].ToString();
}
string strScriptParam = "";
string service_id="", psn = "", contact = "", reason = "", outcome = "", servicetraveltime = "", settingtype = "", strOtherTypeOfSetting = "";
string dtmonth = "", dtday = "", dtyear = "", createby = "", note = "";
string dtservicemonth = "", dtserviceday = "", dtserviceyear = "", dtfollowupbymonth = "", dtfollowupbyday = "", dtfollowupbyyear = "", service = "", HealthScreening = "", service_completed = "";
if (dr["service_outcome_id"] != DBNull.Value)
service_id = dr["service_outcome_id"].ToString();
if (dr["PSN"] != DBNull.Value)
psn = dr["PSN"].ToString();
if (dr["dtDay"] != DBNull.Value)
dtday = dr["dtDay"].ToString();
if (dr["dtMonth"] != DBNull.Value)
dtmonth = dr["dtMonth"].ToString();
if (dr["dtYear"] != DBNull.Value)
dtyear = dr["dtYear"].ToString();
if (dr["mode_of_contact"] != DBNull.Value)
settingtype = dr["mode_of_contact"].ToString();
if (dr["other_mode_of_contact"] != DBNull.Value)
strOtherTypeOfSetting = dr["other_mode_of_contact"].ToString();
if (dr["contact"] != DBNull.Value)
contact = dr["contact"].ToString();
if (dr["reason_for_contact"] != DBNull.Value)
reason = dr["reason_for_contact"].ToString();
if (dr["outcome"] != DBNull.Value)
outcome = dr["outcome"].ToString().Replace("'", "''");
if (dr["service_delivery_time"] != DBNull.Value)
servicetraveltime = dr["service_delivery_time"].ToString();
if (dr["comment"] != DBNull.Value)
note = dr["comment"].ToString();
if (dr["health_screening_recommendations"] != DBNull.Value)
HealthScreening = dr["health_screening_recommendations"].ToString();
if (dr["service_completed"] != DBNull.Value)
{
service_completed = (string)dr["service_completed"].ToString();
}
if (dr["service_complete_date"] != DBNull.Value)
{
DateTime dtServicedate = (DateTime) dr["service_complete_date"];
dtservicemonth = dtServicedate.Month.ToString();
dtserviceday = dtServicedate.Day.ToString();
dtserviceyear = dtServicedate.Year.ToString();
}
if (dr["followup_by_date"] != DBNull.Value)
{
DateTime dtfollowupdate = (DateTime)dr["followup_by_date"];
dtfollowupbymonth = dtfollowupdate.Month.ToString();
dtfollowupbyday = dtfollowupdate.Day.ToString();
dtfollowupbyyear = dtfollowupdate.Year.ToString();
}
if (dr["service"] != DBNull.Value)
{
service = dr["service"].ToString();
}
strScriptParam = "'" + service_id +
"','" + psn +
"','" + dtmonth +
"','" + dtday +
"','" + dtyear +
"','" + settingtype +
"','" + contact +
"','" + reason +
"','" + servicetraveltime +
"','" + outcome.Replace("'", "Å").Replace(Environment.NewLine, "\n")+
"','" + note.Replace("'", "Å").Replace(Environment.NewLine, "\n") +
"','" + strOtherTypeOfSetting.Replace("'", "Å").Replace(Environment.NewLine, "\n") +
"','" + HealthScreening +
"','" + service_completed +
"','" + dtservicemonth +
"','" + dtserviceday +
"','" + dtserviceyear +
"','" + dtfollowupbymonth +
"','" + dtfollowupbyday +
"','" + dtfollowupbyyear +
"', '" + service + "'";
e.Row.Attributes.Add("style", "cursor:hand");
e.Row.Attributes.Add("onclick", "javascript:return ShowGridRow(" + strScriptParam + ");");
ImageButton lnkDel = (ImageButton)e.Row.FindControl("lnkDel");
if (lnkDel != null)
lnkDel.Attributes.Add("onclick", "javascript:ShowGridRow(" + strScriptParam + "); DeleteService('" + dr["service_outcome_id"].ToString() + "');");
}
}
这是我得到的错误信息:
消息:期望')'
和代码,我认为,需要改变!
"','" + outcome.Replace("'", "Å").Replace(Environment.NewLine, "\n")+
"','" + note.Replace("'", "Å").Replace(Environment.NewLine, "\n") +
"','" + strOtherTypeOfSetting.Replace("'", "Å").Replace(Environment.NewLine, "\n") +
我不知道这是否是"真正的"问题,但我想以后节省一些悲伤:
using System.Linq;
// for each param, encode it as 'xyz', where xyz is properly escaped
// e.g. if the source was foo'bar then xyz is foox27bar for a final
// result of 'foox27bar' in the output. This is a valid JS literal
// which evaluates to the string foo'bar
var params = (new string[] { service_id, psn, dtmonth, ..., service })
.Select(p => "'" + JsEncoder.EncodeString(p) + "'");
// Then join all the 'xyz' with commas so result is 'a','b',...'c'
var strScriptParam = string.join(",", params.ToArray());
// note no "javascript:" protocol for onclick
e.Row.Attributes.Add("onclick", "return ShowGridRow(" + strScriptParam + ");");
至少这将生成有效的Javascript文字,并保留Javascript中的'
。
其中JsEncoder如下(c# 3):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace foobar
{
public class JsEncoder
{
static Regex EncodeLiteralRegex;
// Format a bunch of literals.
public static string Format (string format, params object[] items)
{
return string.Format(format,
items.Select(item => EncodeString("" + item)).ToArray());
}
// Given a string, return a string suitable for safe
// use within a Javascript literal inside a <script> block.
// This approach errs on the side of "ugly" escaping.
public static string EncodeString (string value)
{
if (EncodeLiteralRegex == null) {
// initial accept "space to ~" in ASCII then reject quotes
// and some XML chars (this avoids `</script>`, `<![CDATA[..]]>>`, and XML vs HTML issues)
// "/" is not allowed because it requires an escape in JSON
var accepted = Enumerable.Range(32, 127 - 32)
.Except(new int[] { '"', ''', '\', '&', '<', '>', '/' });
// pattern matches everything but accepted
EncodeLiteralRegex = new Regex("[^" +
string.Join("", accepted.Select(c => @"x" + c.ToString("x2")).ToArray())
+ "]");
}
return EncodeLiteralRegex.Replace(value ?? "", (match) =>
{
var ch = (int)match.Value[0]; // only matches a character at a time
return ch <= 127
? @"x" + ch.ToString("x2") // not JSON
: @"u" + ch.ToString("x4");
});
}
}
}
快乐编码。