我开始玩Ajax并发现一个(希望)小问题我似乎无法找到答案。
我在页面上生成一个Ajax表单列表,代码如下所示
using (Ajax.BeginForm("FixTranslation", new { translationId = errorGroup.Key.Id }, new AjaxOptions { UpdateTargetId = "targetCell_" + errorList.Key.Id }))
{
<table>
<tbody>
<tr><td>@errorGroup.SourceText</td></tr>
<tr><td id="@("targetCell_" + errorGroup.Id)"><input type="text" name="text" id="@("target_" + errorGroup.Id)" value="@(errorGroup.TargetText.Replace(' ', (char)0x00A0))" /><input type="submit" value="Fix" /></td></tr>
@foreach (var error in errorGroup.Value)
{
<tr><td>@error.Description</td></tr>
}
</tbody>
</table>
}
在控制器中我有这个动作:
public ActionResult FixTranslation(string projectId, int translationId, string text)
{
if (Request.IsAjaxRequest())
{
return Content("You entered: " + new HtmlString(text));
}
return RedirectToAction("GetProjectOverview", new { projectId = projectId });
}
如果输入字段中没有尖括号,表单会正确发送,这样可以正常工作。但是当输入字段中有一些尖括号(例如“这是带有&lt; 1&gt;标签的文本”)时,我的动作方法根本就不会被调用。
有人知道为什么会这样吗?
非常感谢。
答案 0 :(得分:1)
解决。它不是特定于Ajax表单,原因是请求验证,可以通过这种方式关闭特定的操作方法:
[ValidateInput(false)]
public ActionResult FixTranslation(string projectId, int translationId, string text)
{
...
}