2009-09-24 3 views
1

강하게 입력 된 개체에서 전달되도록이보기 변경 FormCollection 구문 분석하지 않도록 리팩터링 할 노력하고있어. 내 양식 요소는 LinkUpdater 개체의 속성과 동일한 이름입니다. 하지만 컨트롤러의 첫 번째 링크에 중단 점을 넣으면 모든 속성이 null입니다.바인딩 asp.net mvc 컨트롤러에 게시하기위한 복잡한 개체에 대한 양식 요소

아이디어 나 제안이 있으십니까?

보기 :

<%using (Ajax.BeginForm("AddNewLink", "Links", new AjaxOptions { UpdateTargetId = "LinkList", LoadingElementId = "updating", OnSuccess = "done" })) 
    { %> 

<fieldset style="text-align:left"> 
<table> 
<tr><td>Url:</td><td> <input style="width:500px" type="text" name="URL" /></td></tr> 
<tr><td>Description: </td><td><input style="width:400px" type="text" name="Description" /></td></tr> 
<tr><td>Tags: </td><td><input style="width:400px" id="Tags" name="tags" type="text" /></td></tr> 
<tr><td><input type="submit" value="Add Link" name="submit" /></td></tr> 
</table> 
</fieldset> 
    <% } %> 

컨트롤러 포스트 :

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult AddNewLink(LinkUpdater linkUpdater_) 
    { 
     string[] tags = linkUpdater_.Tags.Replace(" ", "").Split(','); 
     linkRepository.AddLink(linkUpdater_.URL, linkUpdater_.Description, tags); 
     ..... 
    } 

LinkUpdater 클래스 :

public class LinkUpdater 
{ 
    public string URL; 
    public string Description; 
    public string Tags; 
} 
+0

원시 POST (Fiddler에서)를 표시 할 수 있습니까? –

답변

4

MVC의 모델 바인더는 필드를 사용하는 동안 속성에 바인딩됩니다. 도

public string URL { get; set; } 

로 변경하고 개인 설정을 사용하는 경우, 그것은 자동으로 바인딩 건너 뜁니다 같은 방법에 의해, 다른 단점이있어.

0

당신이 렌더링하는 강력한 형식의 HTMLHelpers를 사용하지 않는 특별한 이유가 거기에 당신의 입력란?

<%using (Ajax.BeginForm("AddNewLink", "Links", new AjaxOptions { UpdateTargetId = "LinkList", LoadingElementId = "updating", OnSuccess = "done" })) 
    { %> 
<fieldset style="text-align: left"> 
    <table> 
     <tr> 
      <td> 
       Url: 
      </td> 
      <td> 
       <%=Html.TextBox("URL", Model.URL, new { style = "width:500px;" }) %> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       Description: 
      </td> 
      <td> 
       <%=Html.TextBox("Description", Model.Description, new { style = "width:400px;" }) %> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       Tags: 
      </td> 
      <td> 
       <%=Html.TextBox("Tags", Model.Tags, new { style = "width:400px;" }) %> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <input type="submit" value="Add Link" name="submit" /> 
      </td> 
     </tr> 
    </table> 
</fieldset> 
<% } %> 

나는 당신의 문제를 해결할지는 모르지만, 적어도 올바른 방향으로 나아가는 단계입니다.

+0

예. . 이것은 내가 다시 보내고있는 데이터가 전체보기를 바인딩하는 모델이 아니기 때문입니다. . 어쩌면 그게 문제 야. . 전체 페이지보기는 큰 개체에 바인딩됩니다. 이것들은 똑같은 것이어야합니까 ?? – leora

+0

차이점이 없어야합니다. 기본 ModelBinder는 필드가 생성 된 방식에 신경 쓰지 않습니다. 이름과 ID가 바운드 개체의 속성과 일치한다는 것만 알면됩니다. HTMLHelpers는 코드의 유연성과 유형을 안전하게 유지하는 데 도움이됩니다. 퀸 3의 솔루션이 나중에 작동 했나요? –

관련 문제