webentwicklung-frage-antwort-db.com.de

Wie kann ich HTML-Tags in einem Textfeld in asp.net einreichen?

Zunächst möchte ich alle wissen lassen, dass ich eine Aspx-Engine und keine Razor-Engine verwende. 

Ich habe eine Tabelle in einem Formular. Eines meiner Textfelder enthält HTML-Tags wie 

</br>Phone: </br> 814-888-9999 </br> Email: </br> [email protected]  

Wenn ich es baue, gibt es einen Fehler, der besagt 

Ein potenziell gefährlicher Request.Form-Wert wurde vom Client (QuestionAnswer="...ics Phone:<br/>814-888-9999<br...") erkannt.

Ich habe die Validierungsanfrage ausprobiert = "false", aber es hat nicht funktioniert.

Es tut mir leid, dass ich meinen HTML-Code noch nicht hinzugefügt habe. Ich habe eine Frage, wo ich es ggf. bearbeiten kann.

 <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"   Inherits="System.Web.Mvc.ViewPage<dynamic>" %>


<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
EditFreqQuestionsUser
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<script type="text/javascript">
$(document).ready(function () {
    $("#freqQuestionsUserUpdateButton").click(function () {
        $("#updateFreqQuestionsUser").submit();
    });
});
</script>
<h2>Edit Freq Questions User </h2>

<%Administrator.AdminProductionServices.FreqQuestionsUser freqQuestionsUser =   ViewBag.freqQuestionsUser != null ? ViewBag.freqQuestionsUser : new   Administrator.AdminProductionServices.FreqQuestionsUser(); %>
<%List<string> UserRoleList = Session["UserRoles"] != null ? (List<string>)Session["UserRoles"] : new List<string>(); %>
<form id="updateFreqQuestionsUser" action="<%=Url.Action("SaveFreqQuestionsUser","Prod")%>" method="post" onsubmit+>
<table> 
    <tr>
        <td colspan="3" class="tableHeader">Freq Questions User Details <input type ="hidden" value="<%=freqQuestionsUser.freqQuestionsUserId%>" name="freqQuestionsUserId"/> </td>
    </tr>
     <tr>
        <td colspan="2" class="label">Question Description:</td>
        <td class="content">
            <input type="text" maxlength="2000" name="QuestionDescription" value="  <%=freqQuestionsUser.questionDescription%>" />
        </td>
    </tr>
     <tr>
        <td colspan="2" class="label">QuestionAnswer:</td>
        <td class="content">
            <input type="text" maxlength="2000" name="QuestionAnswer" value="<%=freqQuestionsUser.questionAnswer%>" />
        </td>
    </tr>
    <tr>
        <td colspan="3" class="tableFooter">
                <br />
                <a id="freqQuestionsUserUpdateButton" href="#" class="regularButton">Save</a>
                <a href="javascript:history.back()" class="regularButton">Cancel</a>
        </td> 
    </tr>
    </table>
      </form>
</asp:Content>
22
Yusuf

bevor die Seite gesendet wird, müssen Sie den Wert des Textfelds mit html kodieren, mit window.escape (...)

Wenn Sie den nicht maskierten Text auf der Serverseite benötigen, verwenden Sie die HttpUtility.UrlDecode(...)-Methode.

sehr schnelle probe:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="SO.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script>
        function makeSafe() {
            document.getElementById('TextBox1').value = window.escape(document.getElementById('TextBox1').value);
        };

        function makeDangerous() {
            document.getElementById('TextBox1').value = window.unescape(document.getElementById('TextBox1').value);
        }
    </script>
</head>
<body>
    <form id="form1" runat="server" onsubmit="makeSafe();">
    <div>
        <asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine" Rows="10" ClientIDMode="Static"></asp:TextBox>
    </div>
    <asp:Button ID="Button1" runat="server" Text="Button" />
    </form>


     <script>
         makeDangerous();
    </script>
</body>
</html>

Nehmen Sie diese Änderungen an Ihrem Code vor:

<script type="text/javascript">
    $(document).ready(function () {
        makeDangerous();
        $("#freqQuestionsUserUpdateButton").click(function () {
            makeSafe();
            $("#updateFreqQuestionsUser").submit();
        });
    });

    // Adding an ID attribute to the inputs you want to validate is simplest
    // Better would be to use document.getElementsByTagName and filter the array on NAME
    // or use a JQUERY select....

    function makeSafe() {
        document.getElementById('QuestionAnswer').value = window.escape(document.getElementById('QuestionAnswer').value);
    };

    // In this case adding the HTML back to a textbox should be 'safe'
    // You should be very wary though when you use it as actual HTML
    // You MUST take steps to ensure the HTML is safe.
    function makeDangerous() {
        document.getElementById('QuestionAnswer').value = window.unescape(document.getElementById('QuestionAnswer').value);
    }
</script>
25
Mesh

Dekorieren Sie Ihre Controller-Aktion mit dem Attribut [ValidateInput]:

[ValidateInput(false)]
[HttpPost]
public ActionResult Foo(MyViewModel model)
{
    ...
}
7
Darin Dimitrov

Client JavaScript:

function codificarTags() {
                   document.getElementById('txtDescripcion').value = document.getElementById('txtDescripcion').value.replace(/</g,'&lt;').replace(/>/g,'&gt;');
            };

<form id="form1" runat="server" onsubmit="codificarTags();">

Server:

protected void Page_Load(object sender, EventArgs e)
    {
        txtDescripcion.Text = txtDescripcion.Text.Replace(@"&lt;", @"<").Replace(@"&gt;", @">");
3
user3519409

Die Verwendung von HTML in Textfeldern ist nicht empfehlenswert. Verwenden Sie möglicherweise Zeilenumbrüche (Environment.NewLine) oder\r\n anstelle von br? Referenz von .NET

Beispiel (in C #): 

textBox1.Multiline = true;
textBox1.Text = "test" + Environment.NewLine + "test2";
1
XhkUnlimit

Ich würde empfehlen, den HTML-Editor von AjaxControlToolkit zu verwenden. Ich setze das jetzt um. Wenn Ihr Textfeld mehrzeilig und groß genug ist, um HTML aufzunehmen, können Sie es nicht einfach einem HTML-Editor zuweisen. Ihr Benutzer wird auch zufriedener sein.

http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/HTMLEditor/HTMLEditor.aspx

0
Laki Politis