代码之家  ›  专栏  ›  技术社区  ›  Anders

我的表格不是按设计提交的,还是有其他问题?

  •  0
  • Anders  · 技术社区  · 15 年前

    我在ASP.NET MVC中工作,并创建了一个启用了Ajax的简单表单(使用 MicrosoftAjax MicrosoftMvcAjax )。它所做的就是将表单值传递给局部视图,然后用新值更新目标元素。

    这是带有表单的视图:

    <asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
        <h2>
            <%=Html.Encode(ViewData["Message"]) ?? "Home Page"%></h2>
        <div>
            <p>
                <% using (Ajax.BeginForm("AjaxView", new AjaxOptions { UpdateTargetId = "Test" })) { %>
                <%= Html.Label("FormMessage","Message") %>
                <%= Html.TextBox("FormMessage")%>
                <br />
                <%= Html.Submit("Submit","Go") %>
                <% } %>
            </p>
            <p id="Test">
                <% Html.RenderPartial("AjaxView"); %>
            </p>
        </div>
    </asp:Content>
    

    以下是控制器的代码:

    public ActionResult AjaxView()
    {
        if(Request.IsAjaxRequest())
        {
            ViewData["AjaxMessage"] = string.IsNullOrEmpty(Request.Form["FormMessage"]) ? "No Form Data!" : Request.Form["FormMessage"];
            return PartialView("AjaxView");
        }
        return View();
    }
    

    这是局部视图:

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
    
    <%= ViewData["AjaxMessage"] ?? "Default Text" %>
    

    一切正常,但当我试图进入 < > ,脚本不执行。我不想让人们能够向这个字段输入HTML,但是为什么脚本不能执行呢?

    如果脚本被这些字符混淆是一个问题,我可以对传入的文本进行编码吗(使用 Server.HtmlEncode() 或者类似的东西)在Ajax运行之前转换任何“不安全”字符,脚本将继续正常运行?

    谢谢!

    编辑

    我刚刚意识到,如果我输入“<<”,我将从脚本中得到“<”。也许这个信息会有帮助。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Craig Stuntz    15 年前

    使用Firebug的选项卡或Fiddler查看服务器的响应。它可能会告诉你问题所在。每当Ajax请求没有如您所期望的那样运行时,您就应该这样做。对于非Ajax请求,问题通常是显而易见的,因为您会看到死亡的黄色屏幕或类似的东西。对于Ajax请求,如果响应与调用的javascript所期望的不完全一致,那么您必须更深入地了解它。

    ASP.NET的反XSS功能很可能会阻止任何带有尖括号的HTML。如果这是问题所在,您将有几个选择。您可以简单地在请求中禁止使用尖括号(并可能编写一些javascript来向用户显示更好的消息),或者您可以用javascript对它们进行编码。server.htmlencode对您没有帮助,因为您需要在javascript代码中执行此操作,而不是使用C代码。最后,您可以通过在操作上使用validateRequest(false)属性来关闭反XSS功能,在使用codeplex上的反XSS库之类的东西进行您自己的反XSS处理时。