2011-10-07 20 views
60

Czy istnieje inny sposób zwrócenia surowego html z kontrolera? W przeciwieństwie do zwykłego korzystania z plecaka. jak poniżej:asp.net mvc3 powrót surowy html do obejrzenia

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

@{ 
    ViewBag.Title = "Index"; 
} 

@Html.Raw(ViewBag.HtmlOutput) 
+0

Przyznaję, że istnieje wiele powodów do bezpośredniego wstrzykiwania html, ale byłem ciekawy, dlaczego w tym przypadku byłeś? – Rikon

+3

Mam niektóre starszego kodu, który generuje znaczników z biblioteki dll. – River

Odpowiedz

112

Nie ma sensu robić tego, ponieważ View powinien generować html, a nie kontroler. Ale tak czy inaczej, można użyć Controller.Content method, co daje możliwość określenia html wynik, także typ zawartości i kodowanie

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

Albo można użyć trick zbudowany w asp.net-mvc ram - make ciąg zwrotny akcja bezpośrednio. Dostarczy zawartość napisów do przeglądarki użytkownika.

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

W rzeczywistości, dla każdego wyniku działania innego niż ActionResult, ramy próbuje szeregować je w ciąg i zapisywać odpowiedzi.

+0

Zgadzam się z generowaniem widoku html. moja treść jest generowana ze starszej biblioteki dll. Jeśli kontroler nie jest właściwym miejscem do wywołania, to może model? – River

+0

To jest interesujące z użyciem typu zwracanego ciągu. Czy to zawsze działało? –

+0

Tak. Wszystko, co nie jest ActionResult, jest konwertowane na łańcuch znaków i zwracana odpowiedź. – archil

1

który wygląda w porządku, jeśli nie chcesz, aby przekazać go jako wzór łańcucha

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

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

@Html.Raw(Model) 
7

Wystarczy utworzyć właściwość w modelu widoku typu MvcHtmlString. Nie musisz do HTML.Raw to też albo.

+0

Dziękuję. Nie użyłem dokładnie tego, co powiedziałeś. To, co powiedziałeś, pomogło mi wymyślić użycie [DataType.Html] – Dexter

3

Daj szansę powrotu do bootstrap komunikatu ostrzegawczego, to pracował dla mnie

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

Uwaga: Nie zapomnij dodać bootstrap css i js na swojej stronie widoku

nadzieja pomaga ktoś.

+0

Dziękuję, naprawdę mi pomogło :) – rentire

-1

W kontrolerze można użyć MvcHtmlString

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

Państwa zdaniem można po prostu wykorzystać tę właściwość dynamiczny, który ustawiony w kontrolerze jak poniżej

<div> 
     @ViewBag.EncodedHtml 
</div> 
-1

Controller

public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
     ViewBag.show = false; 
     return View(); 
     } 
     } 

Wyświetlenia

@{ 
     ViewBag.Title = "Index"; 
     } 

    @if (ViewBag.show == false){ 
     <div > 
      @*your code*@ 
     </div> 
     } 
Powiązane problemy