Ich habe zwei Ansichten, die beide die gleiche Controller-Methode verwenden:Wie gebe ich zwei verschiedene Ansichten von derselben Aktion in ASP.NET MVC zurück?
//webServiceController.cs
//The actual method is about 40 lines of code. Truncated for readability.
public ActionResult Index()
{
object i = new List<WebServiceMethod>();
i = svcService.populateList("Programs");
return View(i);
}
Die erste Ansicht ist eine HTML-Seite, die die Daten in einer hübschen Tabellenausgabe zeigt:
<% // Index.aspx %>
<table>
<tbody>
<% foreach (var item in Model) { %>
<tr>
<td>
<% if (Convert.ToInt32(item.numberRequests) > 0)
{%>
<%= Html.ActionLink("Details", "Details", new { programNumber = item.programNumber })%>
<%} %>
</td>
<td>
<%= Html.Encode(item.programNumber) %>
</td>
</tr>
<% } %>
</tbody>
</table>
Die zweite Ansicht ist eine quick'n'dirty Umwandlung in JSON, so dass ich magische AJAX Tricks mit den Daten tun können:
<%
// AjaxGetServiceData.aspx
// Convert web service response object into JSON for AJAX.
var jss = new System.Web.Script.Serialization.JavaScriptSerializer();
Response.Write(jss.Serialize(Model));
%>
ich ein Duplikat dererstellt hatteMethode und nannte es AjaxGetServiceData()
, aber das vereitelt den Zweck von MVC.
Auflösung:
Ich habe nicht meine Frage sehr gut, wie von 5-10 Minuten Diskussion belegen ich mit einem Kollegen über dieses Thema sehr einfach hatte. Er stellte mir immer wieder dieselbe Frage, die mich viele Benutzer auf dieser Seite gefragt haben: "Wie weiß der Controller, welche Ansicht er zurückgeben soll?" Ich antwortete: "Das versuche ich herauszufinden." Ich versuchte, die Methode zu erhalten, eine andere Ansicht (oder Json-Ausgabe) zurückzugeben, wenn AJAX der Anforderer war. Ein String-Argument in der Methode war meine Lösung.
Dies ist, was ich meine gewünschten Effekt am Ende mit bekommen:
public ActionResult Index(string isJSON = "no")
{
/// ...All the code from before...
if (isJSON == "yes")
{
return Json(i, JsonRequestBehavior.AllowGet);
}
else
{
return View(i);
}
}
Dann, wenn ich die JSON-Version will, muss ich in meiner AJAX-Anforderung die URL als /MyController/Index/?isJSON=yes
angeben, wenn ich will meine hübsche Tabellenansicht, ich /MyController/
Stehen Sie zu ** kombinieren versuchen * * diese beiden Code-Fragmente in eine einzige HTML-Seite? –
Gibt es einen bestimmten Grund dafür, dass Ihre Ansicht JSON aus dem Modell und nicht von Ihrem Controller generiert? Es scheint mir, als ob du 'jon (i);' 'für die JSON-Ausgabe verwenden solltest. –
Nein; Die AJAX-Ansicht wird für einen ganz anderen Bereich der Site verwendet. – Jake