2012-06-27 2 views
1

MVC4를 사용하여 내 뷰에서 내 컨트롤러로 매개 변수를 가져 오는 데 문제가 있습니다.게시 된 매개 변수는 MVC4의보기에서 컨트롤러로 항상 비어 있습니다.

이 내 모델의 클래스 (이 코드에 대한 미안, 나는 처음에 이미지를 게시하고 싶어하지만 난 그에게 허용 될 수도 안돼서)입니다 :

public class Form 
{ 
    public Form() 
    { 
     this.Rows = new List<Row>(); 
    } 

    public List<Row> Rows { get; set; } 
} 

public abstract class Row 
{ 
    protected Row() 
    { 
     this.Label = string.Empty; 
     this.Type = string.Empty; 
    } 

    public string Label { get; set; } 

    public string Type { get; set; } 
} 

    public class SimpleRow : Row 
{ 

    public SimpleRow() 
    { 
     this.Value = string.Empty; 
    } 

    public string Value { get; set; } 
} 

    public class CheckRow : Row 
{ 
    public CheckRow() 
    { 
     this.CheckedItems = new List<CheckedItem>(); 
     this.Id = 0; 
    } 

    public List<CheckedItem> CheckedItems { get; set; } 

    public int Id { get; set; } 
} 

    public class CheckedItem 
{ 
    public CheckedItem() 
    { 
     this.Title = string.Empty; 
     this.Checked = false; 
    } 

    public string Title { get; set; } 

    public bool Checked { get; set; } 
} 

내가 구축 관리 제 내 모델의 직렬화 인 입력 XML 파일에서 볼 수 있습니다. 그러나 내 문제는 내보기에서 일부 값을 변경하고 저장 단추를 누르면 내 컨트롤러 함수에서 빈 매개 변수가 반환됩니다.

컨트롤러 :

public class FormController : Controller 
{ 
    // GET: /Form/ 
    #region Public Methods and Operators 

    [Authorize] 
    public ActionResult Index(HttpPostedFileBase file) 
    { 
     this.ViewBag.Title = "Formulaire Collaborateur"; 

     if (file != null && file.ContentLength > 0) 
     { 
      return this.View(SerialisationHelper.DeserializeFromStream<Form>(file.InputStream)); 
     } 

     return this.View(); 
    } 

    [HttpPost] 
    [Authorize] 
    public ActionResult EmailForm(Form updatedForm) 
    { 
     Form f = updatedForm; // Empty instance of Form  

     return this.View("Index"); 
    } 
    #endregion 
} 

그리고 내보기 :

@model Form 
@{ 
ViewBag.Title = "Index"; 
} 
@using (Html.BeginForm("EmailForm", "Form", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
<fieldset> 
     @foreach (var row in Model.Rows) 
    { 
     @Html.Partial("Row", row) 
    } 
    <p> 
     <input type="submit" value="Save" /> 
    </p> 
</fieldset> 
<br /> 
} 

이보기 내 모델 클래스에 관련된 다른 뷰를 호출합니다.

더 많은 코드가 필요하면 게시하겠습니다. 그리고 제발, 제 영어를 모국어로 사용합니다. 나는 원어민이 아닙니다.

플로랑은

답변

1

당신이 @Html.Partial("Row", row)에서 일을하지만, 어쨌든이 유형에 대한 EditorTemplate을해야하는지 코드에서 매우 분명 다음 그냥 사용하지 것 :

@foreach (var row in Model.Rows) 
{ 
    @Html.EditorFor(m=>row) 
} 
+0

을 사실 내가 사용 @ Html.Partial() 내 다른보기에서 나는 cshtml 코드를 가지고 있기 때문에. @ Html.EditorFor()를 넣을 때 레이블로 사용되는 속성의 이름을 텍스트 상자에있는 cshtml 프레젠테이션 대신 해당 속성의 값으로 설정합니다. 내 질문의 선명도를 위해이보기 코드를 게시하는 것이 더 좋을 것이라고 생각하면 할 수 있습니다. – PuK

+0

나는 그것을 잘 만들 수 있었다. 덕분에 EditorForce는 마침내 해결책을 찾기 위해 나에게 리드를주었습니다. MVC4가 복잡한 데이터 모델로 어떻게 작동하는지에 대한 오해였습니다. 고마워요 – PuK

+0

안녕하세요, 저는 StackOverflow 도구에 익숙하지 않습니다. 당신의 대답을 받아 들일 때 사과드립니다. 요즘 좀 바빴지만 곧 해결책을 게시 할 것입니다. – PuK

관련 문제