2016-03-04 120 views
1

我是网络编程和MVC的新手。我已经搜索了2天,无法解决这个问题。无法从视图返回视图模型,模型属性返回就好了

  • 如果我尝试返回模型类的集合。在 控制器中,我收到一个空集合。
  • 如果我尝试返回模型的一个实例,我会在 控制器中收到null
  • 如果我尝试从模型中返回一个属性,则所有内容都将以 的预期值运行。

理想我想返回当前的 “项目”

我的模型

public class Images 
{ 
    private string name; 
    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

控制器不工作

public void Commit(Images inI) 
{ 
    Debug.WriteLine((inI == null).ToString()); 
} 

控制器不工作

public void Commit(string Name) 
{ 
    Debug.WriteLine(Name); 
} 

查看

@model IEnumerable<testweb.Models.Images> 
.... 
@using (Html.BeginForm("Commit", "Images", FormMethod.Post)) 
{ 
    <table class="table"> 
     @foreach (var item in Model) 
     { 
      <tr> 
       <td>@Html.DisplayFor(modelItem => item.Name)</td> 
       // Does Not work 
       <td>@Html.ActionLink("Commit", "Commit", new { inI = item })</td> 
       // Does as expected 
       <td>@Html.ActionLink("Commit", "Commit", new { Name = item.Name })</td> 
      </tr> 
     } 
    </table> 
} 

回答

0

如果你想基于一个模型性能的网址,然后使用是

@Html.ActionLink("Commit", "Commit", item) 

因为item已经是一个对象。请注意,帮助程序通过使用模型中每个属性的.ToString()方法生成路由/查询字符串值,所以这只适用于如果您的模型包含string和值类型属性(int,bool等)。如果模型的任何属性都是复杂对象或集合,则绑定将失败,因为它会生成(比如说)...&someCollection=System.Collections.Generic[someModel]。如果模型包含很多属性,或者属性的值是长字符串,则还需要谨慎,因为您可能会超出查询字符串限制并引发异常。