Ich habe ein seltsames Problem mit meinem Modell, das an die Ansicht übergeben wurde
Regler
[Authorize]
public ActionResult Sth()
{
return View("~/Views/Sth/Sth.cshtml", "abc");
}
Aussicht
@model string
@{
ViewBag.Title = "lorem";
Layout = "~/Views/Shared/Default.cshtml";
}
Die Fehlermeldung
The view '~/Views/Sth/Sth.cshtml' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Views/Sth/Sth.cshtml
~/Views/Sth/abc.master //string model is threated as a possible Layout's name ?
~/Views/Shared/abc.master
~/Views/Sth/abc.cshtml
~/Views/Sth/abc.vbhtml
~/Views/Shared/abc.cshtml
~/Views/Shared/abc.vbhtml
Warum kann ich eine einfache Zeichenfolge nicht als Modell übergeben?
View("Sth", null, "abc");
Antworten:
Ja, Sie können, wenn Sie die richtige Überlastung verwenden :
return View("~/Views/Sth/Sth.cshtml" /* view name*/, null /* master name */, "abc" /* model */);
quelle
return View("~/Views/Sth/Sth.cshtml", model: "abc")
return View("Sth", model: "abc");
Wenn Sie benannte Parameter verwenden, können Sie die Notwendigkeit überspringen, den ersten Parameter insgesamt anzugeben
return View(model:"abc");
oder
return View(viewName:"~/Views/Sth/Sth.cshtml", model:"abc");
wird auch den Zweck erfüllen.
quelle
Du hast diese
View
Überlastung gemeint :protected internal ViewResult View(string viewName, Object model)
MVC ist durch diese Überlastung verwirrt:
protected internal ViewResult View(string viewName, string masterName)
Verwenden Sie diese Überladung:
protected internal virtual ViewResult View(string viewName, string masterName, Object model)
Diesen Weg:
return View("~/Views/Sth/Sth.cshtml", null , "abc");
Übrigens könnten Sie einfach Folgendes verwenden:
return View("Sth", null, "abc");
Überlastungsauflösung auf MSDN
quelle
string viewName, object model
method
keinen Konstruktor. Und dieOverload resolution
Got thereturn View("Sth", (object) "abc");
Aber das Aufrufen der MethodeView(string, string, object)
ist in beiden Fällen definitiv klarer.string
nichtobject
als Modell erwartet . es wird also nur die erste Stufe bestehen und dann scheitern.View(string, string, object)
Überlastung, wie Sie in Ihrer Antwort erwähnt haben, scheint auf jeden Fall The Right Answer ™ zu sein.Dies funktioniert auch, wenn Sie für die ersten beiden Parameter null übergeben:
return View(null, null, "abc");
quelle
Dies funktioniert auch, wenn Sie die Zeichenfolge als Objekt deklarieren:
object str = "abc"; return View(str);
Oder:
return View("abc" as object);
quelle
Du schreibst auch gerne
return View(model: "msg");
quelle
Dies scheint so offensichtlich zu sein, aber vielleicht braucht jemand in Zukunft mehr Klarheit:
Wenn in Ihrem Controller:
string id = "abc"; return View(model: id);
Dann brauchen Sie aus Ihrer Sicht:
@model string
Um den Wert zu erhalten, zum Beispiel:
quelle