70 votes

MVC 3 on ne Peut pas passer chaîne de Vue du modèle?

J'ai un problème étrange avec mon modèle passé à la Vue

Contrôleur

[Authorize]
public ActionResult Sth()
{
    return View("~/Views/Sth/Sth.cshtml", "abc");
}

Vue

@model string

@{
    ViewBag.Title = "lorem";
    Layout = "~/Views/Shared/Default.cshtml";
}

Le message d'erreur

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

Pourquoi je ne peux pas passer une simple chaîne de caractères en tant que modèle ?

122voto

nemesv Points 71516

Oui vous pouvez, si vous utilisez le droit de surcharge:

return View("~/Views/Sth/Sth.cshtml" /* view name*/, 
            null /* master name */,  
            "abc" /* model */);

18voto

gdoron Points 61066

Vous signifiait cette View surcharge:

protected internal ViewResult View(string viewName, Object model)

MVC est confondu par cette surcharge:

protected internal ViewResult View(string viewName, string masterName)

Utilisez cette surcharge:

protected internal virtual ViewResult View(string viewName, string masterName,
                                           Object model)

De cette façon:

return View("~/Views/Sth/Sth.cshtml", null , "abc");

Par ailleurs, vous pouvez simplement utiliser ce:

return View("Sth", null, "abc");

Résolution de surcharge sur MSDN

5voto

Alex Dresko Points 1604

Il fonctionne également si vous passer la valeur null pour les deux premiers paramètres:

return View(null, null, "abc");

4voto

Tim Mac Points 726

Il fonctionne également si vous déclarez la chaîne comme un objet:

object str = "abc";
return View(str);

Ou:

return View("abc" as object);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X