2014-10-02 86 views
0

模型为null我遇到了以下问题:
用户访问网站,点击“添加”,然后它发回控制器,模型被检索并发送到查看一次。在内部视图中,我检查模型是否为空 并显示数据。模型为Html.BeginForm()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> 

在结束按钮“确认为”被创建,一旦你点击它调用确认方法,但应用程序变量总是空。如果我将它的价值设置为“模型”,但它可以工作。

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

当创建按钮“确认”模型不为空,我检查。你碰巧知道发生了什么问题吗?

生成的HTML

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

+0

什么是表单标记的呈现html? (不知道你期待'app = @ Model'渲染) – 2014-10-02 12:02:25

+0

'Html.BeginForm'应该环绕所有的输入元素,或者它没有任何可以发布的东西。 – DavidG 2014-10-02 12:06:52

+0

由于您没有编辑任何数据,您为什么需要将整个模型返回(而不是将路径参数设置为模型的唯一ID) – 2014-10-02 12:30:26

回答

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 2014-10-02 12:12:12

+0

@echo好点! – DavidG 2014-10-02 12:13:43

+0

谢谢,它终于开始工作了。任何链接的进一步解释? – Maximus 2014-10-02 12:18:09

2

您正在试图传递一个对象(@Model)作为路径参数(应用程序)。路由参数应该包含标量值(int,string等),而不是对象。在浏览器中查看生成的HTML源代码,看看<form action="">被设置为什么。然后查看model binding的概念。

+0

我使用html表单进行了更新。 – Maximus 2014-10-02 12:04:04

+0

您的表单不包含任何命名元素,因此模型联编程序无法尝试绑定到您的操作方法的“aplikacja应用程序”参数中。 – echo 2014-10-02 12:07:01

+0

对不起,我发布了错误的代码。现在看看。 – Maximus 2014-10-02 12:10:20