asp.net mvc3 gibt rohes HTML zur Ansicht zurück

76

Gibt es andere Möglichkeiten, wie ich unformatiertes HTML vom Controller zurückgeben kann? Im Gegensatz zur Verwendung von Viewbag. Wie unten:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.HtmlOutput = "<HTML></HTML>";
        return View();
    }
}

@{
    ViewBag.Title = "Index";
}

@Html.Raw(ViewBag.HtmlOutput)
Fluss
quelle
Ich gebe zu, dass es viele Gründe gibt, HTML direkt zu injizieren, aber ich war neugierig, warum Sie in diesem Fall waren?
Rikon
3
Ich habe einen alten Code, der Markup aus einer DLL generiert.
Fluss

Antworten:

149

Das macht nicht viel Sinn, denn es Viewsollte HTML generiert werden, nicht der Controller. Sie können jedoch die Controller.Content-Methode verwenden , mit der Sie das Ergebnis-HTML sowie den Inhaltstyp und die Codierung angeben können

public ActionResult Index()
{
    return Content("<html></html>");
}

Oder Sie können den im asp.net-mvc-Framework integrierten Trick verwenden - lassen Sie die Aktion direkt zurückgeben. Es liefert String-Inhalte in den Browser des Benutzers.

public string Index()
{
    return "<html></html>";
}

Tatsächlich ActionResultversucht das Framework für jedes andere Aktionsergebnis als , es in eine Zeichenfolge zu serialisieren und in die Antwort zu schreiben.

Archil
quelle
Ich bin mit der Erstellung von HTML einverstanden. Mein inhaltlicher Gedanke wird aus einer Legacy-DLL generiert. Wenn der Controller nicht der richtige Ort zum Aufrufen ist, dann vielleicht das Modell?
Fluss
1
Das ist interessant bei der Verwendung eines String-Typs vom Typ return. Hat das immer funktioniert?
Matthew Nichols
Ja. Alles, was nicht ActionResult ist, wird in einen String konvertiert und gibt eine Antwort zurück
archil
Gibt es eine Möglichkeit, es als zurückzugeben PartialViewResult?
Shimmy Weitzhandler
3
Wenn Sie sicherstellen möchten, dass es als HTML gerendert wird, fügen Sie den zweiten Parameter hinzu:return Content("<html></html>", "text/html");
Grengas
8

Erstellen Sie einfach eine Eigenschaft in Ihrem Ansichtsmodell vom Typ MvcHtmlString. Sie müssen es dann auch nicht Html.Raw.

Adam Tuliper - MSFT
quelle
Vielen Dank. Ich habe nicht genau das verwendet, was du gesagt hast. Was Sie gesagt haben, hat mir geholfen, mit [DataType.Html]
Dexter
5

Versuchen Sie, die Bootstrap-Warnmeldung zurückzugeben . Dies hat bei mir funktioniert

return Content("<div class='alert alert-success'><a class='close' data-dismiss='alert'>
&times;</a><strong style='width:12px'>Thanks!</strong> updated successfully</div>");

Hinweis: Vergessen Sie nicht, Bootstrap cssund jsauf Ihrer Ansichtsseite hinzuzufügen

Hoffnung hilft jemandem.

Shaiju T.
quelle
Danke, es hat mir wirklich geholfen :)
Rentire
1

Das sieht gut aus, es sei denn, Sie möchten es als Modellzeichenfolge übergeben

public class HomeController : Controller
{
    public ActionResult Index()
    {
        string model = "<HTML></HTML>";
        return View(model);
    }
}

@model string
@{
    ViewBag.Title = "Index";
}

@Html.Raw(Model)
MoXplod
quelle
0

Was für mich (ASP.NET Core) funktionierte, war, den Rückgabetyp ContentResultfestzulegen, dann die HMTL darin zu verpacken und den ContentType auf zu setzen"text/html; charset=UTF-8" . Dies ist wichtig, da es sonst nicht als HTML interpretiert wird und die HTML-Sprache als Text angezeigt wird.

Hier ist das Beispiel einer Controller-Klasse:

/// <summary>
/// Startup message displayed in browser.
/// </summary>
/// <returns>HTML result</returns>
[HttpGet]
public ContentResult Get()
{
    var result = Content("<html><title>DEMO</title><head><h2>Demo started successfully."
      + "<br/>Use <b><a href=\"http://localhost:5000/swagger\">Swagger</a></b>"
      + " to view API.</h2></head><body/></html>");
    result.ContentType = "text/html; charset=UTF-8";
    return result;
}
Matt
quelle
-1
public ActionResult Questionnaire()
{
    return Redirect("~/MedicalHistory.html");
}
Saktiprasad Swain
quelle
4
Bitte beschreiben Sie in Ihrer Antwort, was das Problem war und wie dieses Snippet es lösen wird, um anderen zu helfen, diese Antwort zu verstehen
Slideshowp2
-2

In Controller können Sie verwenden MvcHtmlString

public class HomeController : Controller
{
    public ActionResult Index()
    {
        string rawHtml = "<HTML></HTML>";
        ViewBag.EncodedHtml = MvcHtmlString.Create(rawHtml);
        return View();
    }
}

In Ihrer Ansicht können Sie einfach die dynamische Eigenschaft verwenden, die Sie wie unten in Ihrem Controller festgelegt haben

<div>
        @ViewBag.EncodedHtml
</div>
waris kantroo
quelle