developer tip

MVC 3 문자열을 뷰의 모델로 전달할 수 없습니까?

copycodes 2020. 11. 22. 19:56
반응형

MVC 3 문자열을 뷰의 모델로 전달할 수 없습니까?


뷰에 전달 된 모델에 이상한 문제가 있습니다.

제어 장치

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

전망

@model string

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

오류 메시지

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

왜 간단한 문자열을 모델로 전달할 수 없습니까?


예, 올바른 과부하를 사용하는 경우 가능합니다 .

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

명명 된 매개 변수를 사용하는 경우 첫 번째 매개 변수를 모두 제공 할 필요가 없습니다.

return View(model:"abc");

또는

return View(viewName:"~/Views/Sth/Sth.cshtml", model:"abc");

또한 목적을 달성 할 것입니다.


View과부하를 의미했습니다 .

protected internal ViewResult View(string viewName, Object model)

MVC는 다음과 같은 과부하로 인해 혼동됩니다.

protected internal ViewResult View(string viewName, string masterName)

이 과부하를 사용하십시오.

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

이 방법:

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

그건 그렇고, 당신은 이것을 사용할 수 있습니다.

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

MSDN의 과부하 해결


처음 두 매개 변수에 대해 null을 전달하는 경우에도 작동합니다.

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

문자열을 객체로 선언하는 경우에도 작동합니다.

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

또는:

return View("abc" as object);

당신은 또한 다음과 같이 씁니다.

return View (model : "msg");

참고 URL : https://stackoverflow.com/questions/9802546/mvc-3-cant-pass-string-as-a-views-model

반응형