2011-01-27 4 views
0

내 응용 프로그램은 도우미 클래스를 사용하여 입력 컨트롤에 사용자 지정 특성을 씁니다. 또한 FormCollection을 사용하여 게시 된 값을 가져와야하므로 UserControl을 동적으로로드하고 있습니다. FormCollection 객체에서 속성 값에 액세스 할 수있는 방법이 있습니까?Asp.net MVC의 FormCollection에서 속성 값 가져 오기

예 :

<input type="text" name="textBox1" value="harsha" customAttr1 = "MyValue" /> 

질문 내가 제어기 내부에서 상기 예에서 customAttr1의 값에 액세스 할 수있는 방법이다.

미리 도움을 주셔서 감사합니다.

답변

0

도우미는 어떻게 구조화되어 있습니까? HtmlHelper가 확장되면 NameValueCollection 인 ViewContext.HttpContext.Request.Form에 액세스 할 수 있습니다. FormCollection은 모델 바인더에서 값을 작업 메서드에 다시 게시하는 데 사용됩니다. 다른 곳에서는 공개적으로 공개되지 않습니다.

HTH.

+0

내 ActionResult 메소드 내부에서 액세스해야합니다. – Harsha

+0

사용자 지정 작업 결과? Execute 메서드에서? 이것이 사실이라면 컨트롤러 컨텍스트는 HTTP 컨텍스트에 대한 참조를가집니다. 그렇지 않으면, 더 많은 정보를 게시하고 나는 당신을 더 도울 수 있습니다 ... –

0

단순한 대답은 두렵지 않지만 formCollection에는 기본 키 및 값 정보 만 포함됩니다.

컨트롤러에 들어가면 정보를 쉽게 다시 수거 할 수 있습니까? 어떤 종류의 기계공을 사용하여 전달한 것을 식별 할 수 있습니다.

기본 유형에 매핑되는 컨트롤 목록이있는 경우 다른 방법으로 각 컨트롤을 반복 할 수 있습니다.

MVC는 약간 마술이며 모델에 대한 속성을 목록에 매핑 할 수도 있습니다.

당신이 컨트롤의 목록이있는 모델이있는 경우 :보기에 다음

public class Control 
{ 
    String Value {get; set;} 
    String Attribute1 {get; set;} 
} 

public class ControlViewModel 
{ 
    IList<Control> Controls {get; set;} 
} 

: 당신의 httppost의 행동에

for(var i = 0; i<controls.Count;i++) 
{ 
    // Obviously this isnt complete right i needs to increment from 0; would be build using your htmlhelpers. 
    <input id="Controls[i]_Value" name="Controls[i].Value" type="text" value="hello" /> 
    <input id="Controls[i]_Attribute1" name="Controls[i].Attribute1" type="hidden" value="Attribute" /> 
} 

당신은해야 ControlViewModelControls 목록을 수집 할 수 있습니다 채우다.

나는 이것을 테스트했지만, 아마도 많은 오류가있을 수 있지만 이것은 시작하기에 충분해야합니다. 게시물을 게시 한 후 찾으면이를 추가 할 것입니다.

+0

Hii 나는 예제를주었습니다.당신은 그것을보고 가능한지 설명해 주시겠습니까? – Harsha

+0

나는 그것이 가능하지 않다는 말로 시작했다. FormCollection은 값과 키만을 수집합니다. –

0

루크가 이미 말했듯이 양식 컬렉션은 사전 개체이며 이름, 값 쌍만 보유하고 있습니다. 컨트롤러로 가져 오려면 해당 사용자 지정 특성을 아약스를 통해 전달해야합니다. 컨트롤러의

var form = $("#formid").serialize(), 
    custom = $("input:text").attr("customAttr1").val(); 
$.ajax({ 
    type: "POST", 
    url: "/controller/ProcessData", 
    data:{collection :form,customAttr: custom }, 
    dataType: "html", 
    traditional: true 
}); 

당신은 다음 구문이 필요합니다 :

당신은 아약스 요청에서 문자열 배열을 게시 할 필요가 다수의 사용자 정의 값을 전달해야 할 경우에
public ActionResult ProcessData(FormCollection collection ,string customAttr) 
{ 

컨트롤러 서명과 같은 :

public ActionResult ProcessData(FormCollection collection ,string[] customArray) 
    { 
관련 문제