在我们的ASP.Net MVC 3应用程序中,当字符串值包含双引号时,我们在表单上得到截断的字符串。
例如,给定一个文本框:
@Html.TextBoxFor(m => m.County)
如果用户输入字符串:'Hampshire“County',当将值渲染回表单时,只显示字符串'Hampsire'。如果我检查模型中的值,则双引号被转义作为'汉普郡\'县'。在Fiddler中,发布的值是正确的,并且值正确地存储在数据库中,因此它似乎与将文本框呈现给客户端的Html帮助器相关。
任何人都可以对此有所了解吗?
答案 0 :(得分:0)
我无法重现此问题。刚刚创建了一个新的MVC 3项目,创建了一个带有2个动作(GET和POST)的控制器,带有一个类型视图,接收一个带有字符串属性Text
的对象,并将其显示在一个表单中...正如所料。没有问题。我输入的所有内容都已发布,并在POST中正确返回。
查看强>
@model MvcApplication1.Models.MyClass
@{
ViewBag.Title = "Home";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Home</h2>
@using (Html.BeginForm())
{
@Html.TextBoxFor(m => m.Text)
}
<强>控制器强>
public class HomeController : Controller
{
[HttpGet]
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(MyClass data)
{
return View(data);
}
}
<强>模型强>
public class MyClass
{
public string Text { get; set; }
}
所以,问题必定在其他地方......有些东西可能会混淆正在渲染的值(编辑器模板,javascript)
尝试查看呈现页面的来源以查看其中的值是否正确,如果是,则必须是javascript,否则,它必须是服务器中的内容。
答案 1 :(得分:0)
事实证明这是我们自己制作的问题。事实证明,大约9个月之前有一些明亮的火花(我)认为在自定义HttpEncoder中覆盖HtmlAttributeEncode()方法是个好主意。这在输出渲染期间触发。
我添加此内容的原因是应用程序的某些部分需要将脚本块呈现给客户端,而默认编码器正在使用HTML中的JS代码。
当我们删除重写方法时,问题就消失了。获得的经验:除非你绝对需要,否则不要使用框架。
再次感谢大家花时间考虑这一点。