2011-05-04 5 views
7

ASP.Net MVC3을 살펴보고 Create에 대한 자동 생성 뷰 중 하나에서 "Html.EditorFor (model => model.User)"를 사용하여 사용자의 텍스트 상자를 제공합니다. 사용자 이름을 입력하십시오. 이상적으로, 나는 이것을 @ User.Identity.Name으로 자동으로 채울 것이다.Html.EditorFor를 ASP.Net MVC3의 값으로 자동 채우기는 어떻게해야합니까?

이 작업을 수행하는 올바른 방법은 무엇입니까? Html.EditorFor를 사용하면보기에서 자동으로 채울 수 있습니까? 아니면 컨트롤러를 전달할 때 컨트롤러에서 설정해야합니까?

내가 찾은 그 나는이에서 컨트롤러의 작성 방법을 변경하는 경우 : 여기에

public ActionResult Create() 
    { 
     return View(); 
    } 

:

public ActionResult Create() 
    { 
     MyObject myobject = new MyObject(); 
     myobject.User = User.Identity.Name; 
     return View(myobject); 
    } 

이 작동하는 것 같다합니다. 이 작업을 수행하는 올바른 방법입니까?

미리 권한을 확인해 주셔서 감사합니다.

답변

4

물론, 할당은 문제가 없습니다.

+0

정적 클래스가 없습니다. –

+0

예 -'User'는입니다. –

+0

아니요. 이것은 컨트롤러에있는 getter 만 가진'IPrincipal' 속성입니다. 이 getter는 조롱을받을 수있는 HttpContext.User 속성을 호출합니다. 정적이 아닙니다. –

2

이것은 절대적으로 올바른 방법입니다. 사용자 문자열 속성이 포함 된보기 모델 (MyObject)을 정의한 다음 컨트롤러 액션에서이 모델을 인스턴스화하고 채우고 마지막으로보기 모델을 뷰에 전달하여 표시합니다. 컨트롤러의 User.Identity 속성이 조롱 당할 수있는 추상화이기 때문에 단위 테스트도 쉽습니다.

+0

우수 감사합니다. – Darren

1

이 경우 좋은 방법이지만 큰 프로젝트를 작성하면 컨트롤러가 아닌 모든 모델을 넣을 글로벌 모델 클래스를 만드는 것이 좋습니다.

+0

감사합니다. 어떤 비트가 글로벌 모델 클래스 인 User.Identity.Name에 포함됩니까? – Darren

관련 문제