| 

.NET C# Java Javascript Exception

1
Hi,

ich steige gerade in die MVC und AJAX welt neu ein und bin auf folgendes Problem gestossen. In meiner _Layout datei habe ich zwei bereiche definiert:

<body>
<div class="wrapper">
@Html.TextBox("myTestBox")
<div class="menu">
@Html.Action("MainMenu","BartMenu")
</div>

<div class="content" id="content">
@RenderBody()
</div>

</div>
</body>


das menü wird als PartialView folgendermaßen aufgebaut

Ajax.ActionLink(myCaption,myAction, myController, myParameterObject,(new AjaxOptions(){
HttpMethod = "GET",
InsertionMode = System.Web.Mvc.Ajax.InsertionMode.Replace,
UpdateTargetId = "content"


soweit so gut, der Controller sieht folgendermaßen aus:

public ActionResult WriteMainContent(SubNode nameObject)
{

return View(nameObject);
}


Wenn die Action WriteMainContent einen View() durückgibt, wird im div "content" die komplette Seite, also inklusiv dem Menü neu geladen. Ich möchte aber eigentlich, dass nur der "WriteMainContent"-View im div "content" geladen wird. Das kann ich erreichen wenn ich einen PartialView() zurückgebe, ich bin nur nicht sicher ob das dann "BestPractice" ist, da nach meinem Verständnis von MVC ein Controller einen kompletten View laden soll. Bzw. dass das wenigstens pro angezeigte Seite einmal der Fall sein sollte. Denn wenn ich hier jetzt einen PartialView() zurückgeben muss um mein Ziel zu erreichen, wird die vollständige applikation ausschliesslich über PartialViews arbeiten, und ich weiss nicht ob das im Sinne des Erfinders ist..

Danke!
News:
10.03.2013
Sweatdiver 126 1 6
Hi,
warum integrierst du das Menü nicht direkt in deinem Layout? Oder wird das irgendwie dynamisch zusammengestellt?
mrmee 11.03.2013
jo, das Menü wird dynamisch zusammengestellt. btw. wenn ich das ohne Ajax löse, funktioniert es auch mit return View()...
Sweatdiver 11.03.2013
1 Antwort
1
Wenn du nur den View ohne das Layout drumrum ausgeben willst musst du sie anstatt mit
return View(model);

als Partial zurückgeben
return PartialView(model);

Um einen Fallback zu haben falls die Seite mal direkt und nicht über Ajax aufgerufen wird solltest du folgendes Konstrukt schreiben:
if(Request.IsAjaxRequest())
return PartialView(model);
else return View(model);
11.03.2013
schulz3000 390 1 6
ist das best Practice seine Anwendung fast vollständig mit PartialViews statt Views zu regeln?
Sweatdiver 12.03.2013
Wenn du deine komplette Navigation auf Ajax-Basis aufbaust musst du die PartialView Methode nehmen weil du sonst immer die Layoutseite mit deiner View mitbekommst. Im Endeffekt ist jede deiner Views eine partielle View die mit oder ohne Ajax in deine Layoutseite geladen wird. Mit Ajax passiert das halt Client- und ohne Ajax Serverseitig.
schulz3000 12.03.2013

Stelle deine Javascript-Frage jetzt!