当输入字段中有HTML标记时,未提交Ajax表单

时间:2011-06-15 15:49:04

标签: asp.net-mvc asp.net-ajax

我开始玩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;标签的文本”)时,我的动作方法根本就不会被调用。

有人知道为什么会这样吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

解决。它不是特定于Ajax表单,原因是请求验证,可以通过这种方式关闭特定的操作方法:

[ValidateInput(false)]
public ActionResult FixTranslation(string projectId, int translationId, string text)
{
    ...
}