Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模型和视图之间的asp.net mvc绑定_C#_Asp.net Mvc 3 - Fatal编程技术网

C# 模型和视图之间的asp.net mvc绑定

C# 模型和视图之间的asp.net mvc绑定,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我是asp.NETMVC新手。我的模型是这样的: [Bind(Exclude = "JournalId")] public class Journal { [ScaffoldColumn(false)] public int JournalId { get; set; } [DisplayName("Customer")] public int CustomerId { get; set; } [DisplayName("Till")] pu

我是asp.NETMVC新手。我的模型是这样的:

 [Bind(Exclude = "JournalId")]
public class Journal
{
    [ScaffoldColumn(false)]
    public int JournalId { get; set; }

    [DisplayName("Customer")]
    public int CustomerId { get; set; }

    [DisplayName("Till")]
    public int TillId { get; set; }

    [Required(ErrorMessage = "A Journal name is required")]
    [StringLength(160)]
    public string Name { get; set; }

    [DisplayName("Journal creation date")]
    public DateTime Date { get; set; }

    [DisplayName("Journal creation time")]
    public DateTime Time { get; set; }

    public virtual Customer Customer { get; set; }
    public virtual Till Till { get; set; }

}

[Bind(Exclude = "CustomerId")]
public class Customer
{
    [ScaffoldColumn(false)]
    public int CustomerId { get; set; }

    [Required(ErrorMessage = "A customer name is required")]
    [StringLength(160)]
    public string Name { get; set; }

    [StringLength(250)]
    public string Address { get; set; }
}


[Bind(Exclude = "TillId")]
public class Till
{
    [ScaffoldColumn(false)]
    public int TillId { get; set; }

    [Required(ErrorMessage = "A till no is required")]
    [StringLength(160)]
    public string TillNo { get; set; }

    [StringLength(100)]
    public string TillOperator { get; set; }
}
以下是我的控制器的一个动作的定义:

 public ViewResult Index()
    {
        var journals = db.Journals.AsEnumerable<Journal>();
        ViewData["journals"] = journals;
        return View();
    }
公共视图结果索引() { var journals=db.journals.AsEnumerable(); ViewData[“日记账”]=日记账; 返回视图(); } 以及以下观点:

@model IEnumerable<ErikDemo.Models.Journal>
@foreach (var item in (IEnumerable<ErikDemo.Models.Journal>)ViewData["journals"]) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Customer.Name)
    </td>
    <td>
        @Truncate(item.Till.TillNo, 25)
    </td>
    <td>
        @Truncate(item.Name, 25)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Date)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Time)
    </td>
    <td>
        @Html.ActionLink("Edit", "Edit", new { id=item.JournalId }) |
        @Html.ActionLink("Details", "Details", new { id=item.JournalId }) |
        @Html.ActionLink("Delete", "Delete", new { id=item.JournalId })
    </td>
</tr>
@model IEnumerable
@foreach(IEnumerable视图数据[“日记账”]中的var项目){
@DisplayFor(modelItem=>item.Customer.Name)
@截断(第25项)
@截断(item.Name,25)
@DisplayFor(modelItem=>item.Date)
@DisplayFor(modelItem=>item.Time)
@ActionLink(“编辑”,“编辑”,新的{id=item.JournalId})|
@ActionLink(“详细信息”,“详细信息”,新的{id=item.JournalId})|
@ActionLink(“Delete”,“Delete”,new{id=item.JournalId})
虽然在调试时,我可以在控制器中看到传递给视图的列表不是空的,而且我还看到手表中的ViewData[“journals”].Local不是空的,但不会显示任何内容。我还使用了View.Model和return视图(journals.ToList())将数据发送到视图,但似乎什么都不起作用。这里有什么问题吗?已经有半天了。

您是否忘记了
标记?如果您没有在呈现页面时查看页面的源代码,我建议您将此作为下一步操作。

这是错误的:(嗯,可以这样做,但我想你想通过一个模型)

ViewBag.Journal = "my string";
ViewBag
是动态的,因此可以使用点表示法

另外

此代码:

@model IEnumerable<ErikDemo.Models.Journal>
@foreach (var item in (IEnumerable<ErikDemo.Models.Journal>)ViewData["journals"])
然后在行动中:

public ViewResult Index()
{
    var journals = new JournalsViewModel.GetJournals();

    return View(journals); //You just passed journals as a model
}

不,它只是一个代码片段。它确实有标记。在呈现的HTML中有任何输出吗?你的问题不清楚。我试过了,但似乎不起作用。数据存在于模型中,我可以通过调试器看到它,但它“拒绝”在控制器的索引操作中,当您将其作为模型传递时,尝试执行journal.ToList()。变量db来自何处?让我更新我的答案。db是一个DbContext,具有以下属性:public DbSet Journals{get;set;}public DbSet Customers{get;set;}public DbSet Tills{get;set;}。问题是,如果您调用db.Journals作为iqualable,并且在转换为IEnumerable时,它有点失败。因此,如果您想访问实体,您必须调用db.Journals.Local。将其更改为该名称,它就起作用了。不过,有点不确定为什么。。。
ViewBag.Journal = "my string";
@model IEnumerable<ErikDemo.Models.Journal>
@foreach (var item in (IEnumerable<ErikDemo.Models.Journal>)ViewData["journals"])
@model IEnumerable<ErikDemo.Models.Journal>
@foreach (var item in Model)
public class JournalViewModel
{
    public IEnumerable<Journals> GetJournals()
     {
         using(var db = new ErikDataContext())
          {
              return db.Journals.ToList();

          }
     }
}
public ViewResult Index()
{
    var journals = new JournalsViewModel.GetJournals();

    return View(journals); //You just passed journals as a model
}