[英]How to save special characters in c# asp.net
I have this JS
code below to save the data input by a user. 我下面有这个JS
代码,用于保存用户输入的数据。 All data is seen in var JsonData = JSON.stringify(data);
所有数据都在var JsonData = JSON.stringify(data);
看到 . 。 I input a special character in Task (& sign)
[Task Value is (A & B)]
. 我在Task (& sign)
输入了特殊字符[Task Value is (A & B)]
。 But in my controller It cut the data before the &
sign. 但是在我的控制器中,它会在&
符号之前剪切数据。
$('#btn_SubmitOT').live('click', function () {
if (lastSel != -1) {
$('#' + lastSel + '_isValidated').val(true);
// $('#' + lastSel + '_RequestedBy').val();
var datefiled = $('#ot_dateFiled').val().
$('#' + lastSel + '_OTDateApplied').val(datefiled);
jQuery('#grdOTApplication').saveRow(lastSel, false, 'clientArray');
}
var task = $("#task_ot").val();
//var data = $("#grdOTApplication").jqGrid('getRowData');
var data = {
DateFiled: $("#ot_dateFiled").val(),
DateofOvertime: $("#ot_dateOfOT").val(),
EmployeeId: $("#empApplicants").val(),
In1: $("#from_sup").val() + $("#from_AM_PM").val(),
Out1: $("#to_sup").val() + $("#to_AM_PM").val(),
EstimatedHours: $("#estimateHrsWrk_ot").val(),
SpecificTask: task,
ApprovedBy: $("#approveofficial").val() != null ? $("#approveofficial").val() : 0,
RecommendedBy: $("#recommenders").val() != null ? $("#recommenders").val() : 0,
SupervisedBy: $("#immediatesupervisor").val() != null ? $("#immediatesupervisor").val() : 0,
IsCOC: $('#cmbCO').val() == 1 ? true : false
}
var JsonData = JSON.stringify(data);
var urlPA = '../Request/saveOvertimeRequest?overtimeRequest=' + JsonData + '&_role = 3;
$.ajax({
type: "GET",
url: urlPA,
success: function (response) {
alert(response);
$("#grdOTApplication").trigger("reloadGrid", [{
current: true
}]);
$("#grdOTHistory").trigger("reloadGrid", [{
current: true
}]);
$("#ot_dateOfOT").val("");
$("#from_sup").val("__:__");
$("#to_sup").val("__:__");
$("#estimateHrsWrk_ot").val("");
$("#task_ot").val("");
},
error: function (response) {
alert("Error");
},
datatype: "text"
});
});
Here is my Controller code I put a breakpoint and debug it why after the it reach in this code ovt = jss.Deserialize<OvertimeRequest>((string)overtimeRequest);
这是我的控制器代码,我放置了一个断点并对其进行调试,为什么在代码中到达断点之后ovt = jss.Deserialize<OvertimeRequest>((string)overtimeRequest);
it direct to the catch
. 它直接catch
。 And as I mention above it it cuts the data before the the &
sign. 正如我在上面提到的,它会在&
符号之前剪切数据。
public String saveOvertimeRequest(String overtimeRequest, int _role)
{
Nullable<DateTime> MyNullableDate = null;
try
{
Int32 requestedBy = Convert.ToInt32(HttpContext.Current.Session["PersonId"]);
Int32 empId = Convert.ToInt32(HttpContext.Current.Session["EmpId"]);
OvertimeRequest ovt = new OvertimeRequest();
JavaScriptSerializer jss = new JavaScriptSerializer();
ovt = jss.Deserialize<OvertimeRequest>((string)overtimeRequest);
ovt.IsFromESS = true;
ovt.RequestedBy = requestedBy;
if (_role == 3 || ((ovt.SupervisedBy == 0 || ovt.SupervisedBy == null) && ovt.RecommendedBy > 0 && ovt.ApprovedBy > 0))
{
ovt.SupervisedBy = null;
ovt.DateSupervised = DateTime.Now;
}
if (_role == 4 || ((ovt.SupervisedBy == 0 || ovt.SupervisedBy == null) && (ovt.RecommendedBy == 0 || ovt.RecommendedBy == null) && ovt.ApprovedBy > 0))
{
ovt.SupervisedBy = null;
ovt.DateSupervised = DateTime.Now;
ovt.RecommendedBy = null;
ovt.DateRecommend = DateTime.Now;
}
if (_role == 5 || ((ovt.SupervisedBy == 0 || ovt.SupervisedBy == null) && (ovt.RecommendedBy == 0 || ovt.RecommendedBy == null) && (ovt.ApprovedBy == 0 || ovt.ApprovedBy == null)))
{
ovt.SupervisedBy = null;
ovt.DateSupervised = DateTime.Now;
ovt.RecommendedBy = null;
ovt.DateRecommend = DateTime.Now;
ovt.ApprovedBy = null;
ovt.DateApproved = DateTime.Now;
ovt.IsPosted = true;
ovt.DatePosted = DateTime.Now;
}
try
{
db.AddToOvertimeRequests(ovt);
db.SaveChanges();
}
catch (Exception)
{
throw;
}
}
catch (Exception e)
{
return "An error has occured while sending your request.";
}
}
You are loosing the data because you are doing a GET request. 您正在丢失数据,因为您正在执行GET请求。 When you do GET call, The data will be sent as querystring and &
has a special meaning when it is in querystring. 当您执行GET调用时,数据将以查询字符串形式发送,并且&
在查询字符串中时具有特殊含义。 It is a seperator for different querystring items. 它是不同查询字符串项的分隔符。
What you should be doing is, making a POST call to the server. 您应该做的是对服务器进行POST调用。 Also there is no need to explicitly doing the deserialization as model binder does that for you. 同样,也不需要显式进行反序列化,因为模型绑定程序可以为您完成反序列化。 Just create a C# POCO class which represent the structure of data you are sending and use that as your action method parameter. 只需创建一个C#POCO类即可,该类代表您要发送的数据的结构,并将其用作操作方法参数。
public class OverTimeViewModel
{
public DateTime DateFiled { set;get;}
public DateTime DateofOvertime { set;get;}
public int EstimatedHours { set;get;}
//Add other properties here
}
and in the javascript code, use POST as the ajax method. 并在javascript代码中,将POST用作ajax方法。
var viewModel = {
DateFiled: '12/12/2012'
EstimatedHours : 10
} ;
// values hard coded for demo. Replace with real values
$.ajax({
type: "POST",
url: urlPA,
data : viewModel
success: function (response) {
//do something with the response
}
});
Now make sure you use the view model we created as the parameter 现在确保您使用我们创建的视图模型作为参数
public ActionResult SaveOvertimeRequest(OverTimeViewModel model)
{
//check model.DateField etc and use
}
I figure it out thanks to all who view my post. 感谢所有查看我帖子的人,我弄清楚了。
I use this code var task =escape($("#task_ot").val());
我使用此代码var task =escape($("#task_ot").val());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.