2009-10-25 3 views
3

저는 ASP.NET MVC를 처음 사용하므로 확실한 답을 얻을 수 있습니다. 지금은 입력 컨트롤을 많이 내보기에서 폼을 가지고, 그래서 나는 다음과 같다 작업이 있습니다명명 된 매개 변수를 컨트롤러 입력 대 FormCollection으로 사용

public ActionResult MyAction(string formItemOne, int? formItemTwo, etc...) 

그것은 꽤 추한 다스 매개 변수, 같은 있습니다. 나는 이것을 다음과 같이 변경하려고합니다.

public ActionResult MyAction(FormCollection formItems) 

그리고 나서 항목을 동적으로 구문 분석합니다. 그러나 FormCollection으로 변경하면 양식 항목은 더 이상 "자동으로"포스트 백을 통해 해당 값을 기억하지 않습니다. 왜 FormCollection으로 변경하면이 동작이 변경됩니까? 자동으로 다시 작동 시키려면 어떻게해야할까요? 도움을

감사합니다,

~ 저스틴

답변

4

또 다른 해결 방법은 원시 값을 조작하는 대신 모델을 사용하는 것입니다. 이처럼 :보기에

public ActionResult MyAction(MyModel model) 
{ 
    // Do things with model. 

    return this.View(model); 
} 

:

class MyModel 
{ 
    public string ItemOne { get; set; } 
    public int? ItemTwo { get; set; } 
} 

그런 다음이 코드를 사용

<%@ Page Inherits="System.Web.Mvc.ViewPage<MyModel>" %> 
<%= Html.TextBox("ItemOne", Model.ItemOne) %> 
<%= Html.TextBox("ItemTwo", Model.ItemTwo) %> 
0

그들이 마술 더 이상 ModelState 사전에 삽입되지 않습니다 어쩌면 때문이다. 거기에 삽입 해보십시오.

UpdateModel() 또는 TryUpdateModel()을 사용하는 경우 값이 유지 될 것으로 생각됩니다.

1

이 하나 하나 된 매개 변수의 큰 목록을 대체하려면 view model를 사용합니다. POST 후이 모델을 뷰에 반환하면 뷰에 게시 된 값이 저장됩니다.

보기 모델은 공개 속성으로 작업 매개 변수가있는 단순한 클래스입니다. 예를 들어, 대체 이런 일을 할 수있는 :

public ActionResult MyAction(string formItemOne, int? formItemTwo, etc...) 

public ActionResult MyAction(FormItems formItems) 
{ 
    //your code... 
    return View(formItems); 
} 

와 FormItems 당신은 스티븐 월터의 포스트 ASP.NET MVC Tip #50 – Create View Models의 완벽한 예를 볼 수 있습니다

public class FormItems 
{ 
    public property string formItemOne {get; set;} 
    public property int? formItemTwo {get; set;} 
} 

을입니다.

관련 문제