2014-10-02 6 views
0

다음과 같은 문제가 발생했습니다.
사용자 방문 사이트에서 "추가"를 클릭하고 컨트롤러로 다시 보내면 모델이 검색되고 다시 한 번보기로 전송됩니다. 내부보기, 모델이 null이 아닌지 확인합니다 및 데이터를 표시합니다.모델이 Html.BeginForm()으로 null입니다. ASP.NET MVC

@if (Model != null) 
    { 
     <div id="appInfo"> 
      <table> 
       <tr> 
        <th>@Html.DisplayNameFor(x => Model.tytul)</th> 
        <th>@Html.DisplayNameFor(x => Model.kategoria.nazwa)</th> 
        <th>@Html.DisplayNameFor(x => Model.liczba_ocen)</th> 
        <th>@Html.DisplayNameFor(x => Model.avg_ocena)</th> 
        <th>@Html.DisplayNameFor(x => Model.typ)</th> 
       </tr> 
       <tr> 
        <td>@Model.tytul</td> 
        <td>@ViewData["kategoria"]</td> 
        <td>@Model.liczba_ocen</td> 
        <td>@Model.avg_ocena</td> 
        <td>@Model.typ</td> 
       </tr> 
      </table> 
     </div> 
<div> 
       @using (Html.BeginForm("Confirm", "Wydawca", new { app = @Model })) 
       { 
        <input type="submit" value="Cofirm it" /> 
       } 
      </div> 

"확인"버튼이 생성되고 한 번 클릭하면 확인 메소드가 실행되지만 app 변수는 항상 null입니다. 모델이 아닌 다른 것으로 그 가치를 설정하면 작동합니다.

[HttpPost] 
    public ActionResult Confirm(aplikacja app) 
    { 
     ... 
    } 

"확인"버튼을 만드는 동안 모델이 null이 아닌지 확인했습니다. 무슨 일이 일어나고 있는지 아십니까?

당신은 경로 매개 변수 (응용 프로그램)으로 객체 (@Model)을 통과하려고

<form action="/Wydawca/Confirm?app=Adds.Models.aplikacja" method="post">  
    <input type="submit" value="Zatwierdź" /> 

+0

양식 태그의 렌더링 된 html은 무엇입니까? (당신이'app = @ Model'을 렌더링 할 것으로 기대하는지 확신 할 수 없다.) –

+0

'Html.BeginForm'은 모든 입력 요소를 감싸 줘야하거나 게시 할 것이 없다. – DavidG

+0

데이터를 편집하지 않으므로 전체 모델을 다시 게시해야하는 이유 (모델의 고유 ID에 route 매개 변수를 설정하는 것과 반대) –

답변

5

Html.BeginForm은 입력 요소를 모두 포함해야하며 게시 할 내용이 없습니다. 보기를 다음으로 변경하십시오.

@if (Model != null) 
{ 
    @using (Html.BeginForm("Confirm", "Wydawca", new { app = @Model })) 
    { 
     <div id="appInfo"> 
      <table> 
       <tr> 
        <th>@Html.DisplayNameFor(x => Model.tytul)</th> 
        <th>@Html.DisplayNameFor(x => Model.kategoria.nazwa)</th> 
        <th>@Html.DisplayNameFor(x => Model.liczba_ocen)</th> 
        <th>@Html.DisplayNameFor(x => Model.avg_ocena)</th> 
        <th>@Html.DisplayNameFor(x => Model.typ)</th> 
       </tr> 
       <tr> 
        <td> @Model.tytul</td> 
        <td>@ViewData["kategoria"]</td> 
        <td>@Model.liczba_ocen</td> 
        <td>@Model.avg_ocena</td> 
        <td>@Model.typ</td> 
       </tr> 
      </table> 
     </div> 
     <div> 
      @Html.HiddenFor(x => Model.tytul) 
      @Html.HiddenFor(x => Model.kategoria.nazwa) 
      @Html.HiddenFor(x => Model.liczba_ocen) 
      @Html.HiddenFor(x => Model.avg_ocena) 
      @Html.HiddenFor(x => Model.typ) 
      <input type="submit" value="Cofirm it" /> 
     </div> 
    } 
} 
+0

양식에 명명 된 요소가 없습니다. – echo

+0

@echo 좋은 장소! – DavidG

+0

고마워, 마침내 일하다. 추가 설명을위한 링크? – Maximus

2

생성 된 HTML. 경로 매개 변수에는 객체가 아닌 스칼라 값 (int, string 등)이 포함되어야합니다. 브라우저에서 생성 된 HTML 소스를보고 <form action="">이 무엇으로 설정되어 있는지 확인하십시오. 그런 다음 model binding의 개념을 검토하십시오.

+0

html 양식으로 업데이트했습니다. – Maximus

+0

폼에 이름이 지정된 요소가 없으므로 모델 바인더가 액션 메소드의 'aplikacja app' 매개 변수에 바인딩하려고 시도하는 것은 없습니다. – echo

+0

죄송합니다. 잘못된 코드를 올렸습니다. 이제 한번보세요. – Maximus

관련 문제