在输入中输入“撇号"后,无法查看已保存的数据 [英] Cannot view the saved data when 'apostrophe' is entered in the input

查看:49
本文介绍了在输入中输入“撇号"后,无法查看已保存的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试修改现有代码(由我的前任编写),以将撇号(连同测试一起输入到文本框中)更改为Å"符号,同时将其显示在文本框中.我该如何更改?当我尝试从代码中删除符号时,我无法获取结果/在文本框中看到保存的文本,并且显示错误消息.

I am trying to modify an existing code (written by my predecessor) which changes the apostrophe (entered along with the test into the text box) to "Å" symbol while displaying it back in the text box. How can I change this? when I tried to remove the symbol from the code, I cannot get the result back/see the saved text in the text box and it gives an error message.

这是网格视图控件的代码,其中显示了结果,这是我想单击的位置,因此请查看输入了什么数据:

Here is the code of the grid view control in which the result is displayed and this is where I am suppose to click so see what data is entered:

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() + "');");
        }
    }

这是我收到的错误消息:

This is the error message I get:

消息:应为')'

Message: Expected ')'

我认为需要更改代码!

 "','" + outcome.Replace("'", "Å").Replace(Environment.NewLine, "\\n")+ 
                             "','" + note.Replace("'", "Å").Replace(Environment.NewLine, "\\n") + 
                             "','" + strOtherTypeOfSetting.Replace("'", "Å").Replace(Environment.NewLine, "\\n") +

感谢您的帮助.

推荐答案

我不知道这是否是真正的"问题,但我想以后再省点麻烦:

I have no idea if this is the "real" problem, but I feel like saving some grief later:

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 foo\x27bar for a final
// result of 'foo\x27bar' 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中保留'.

At least that will generate valid Javascript literals and preserve the ' in the Javascript.

JsEncoder如下(C#3):

Where JsEncoder is as follows (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");
                });
            }
        }
}

快乐的编码.

这篇关于在输入中输入“撇号"后,无法查看已保存的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆