【问题标题】:Passing data base info from controller to view in .NET MVC将数据库信息从控制器传递到 .NET MVC 中的视图
【发布时间】:2016-10-14 22:26:56
【问题描述】:

您好,我正在尝试将一些数据库信息从我的控制器传递到我的视图,但没有找到最好的方法。我在我的控制器中填充模型,但我需要从数据库中填充这些值。我有一个名为 DataAccess 的类,它包含我所有的查询,但不确定我应该将逻辑放在哪里来填充。我会在我的控制器中说一个 for 循环来填充值,但似乎失败了,因为我在那里声明了 SchedulerViewModel

这个想法是在广播按钮旁边有我的值,因此选择单选按钮时,我可以“检测”该值并使用该选项做点事。...任何建议都将不胜感激...

我的模特:

 public class SchedulerViewModel
 {
    public string theValue { get; set; }
    public SelectListItem[] Items { get; set; }        
 }

我的控制器:

public ActionResult Scheduler()
{  
   //DataAccess dataAccess = new DataAccess(); 
   //for loop here???                      
    var model = new SchedulerViewModel
    {                     
        Items = new[]
        {
            new SelectListItem { Value = "U", Text = "USA" }                    
        }
    };
    return View(model);
}

我的看法:

@using (Html.BeginForm())
{
    for (int i = 0; i < Model.Items.Count(); i++)
    {
        @Html.RadioButtonFor(x => x. theValue, Model.Items[i].Value, new { id = "item_" + i })
        @Html.Label("item_" + i, Model.Items[i].Text)
        <br />
    }  
}

【问题讨论】:

    标签: asp.net-mvc model radiobuttonlist


    【解决方案1】:

    理想情况下,您应该有一个服务类来处理您的数据库访问。您不应该直接从控制器调用数据层,尽管没有什么可以阻止您这样做。为简单起见,我只是在控制器中直接调用数据访问。这个想法是,您需要在控制器级别的 View 中返回一个数据集合,这里是一个 IEnumerable,以便 View 可以显示这些数据。

    控制器:

    [HttpGet]
    public ActionResult Index()
    {
    KnowledgeBaseEntities context = new KnowledgeBaseEntities();
    IEnumerable<ISSUE> issues = context.ISSUES;
    if(issues == null)
    {
       return HttpNotFound();
    }
    return View(issues);
    }
    

    查看: 如您所见,我正在引用我期望从控制器获得的数据集合。

    @model IEnumerable<ISSUE>
    

    在这种情况下,它是一个 IEnumerable,就像我在控制器中一样。然后你会注意到我在迭代模型时引用了一个模型对象。

    @foreach (var item in Model)
    

    然后我循环遍历模型的每一行,以便将表行添加到表中。因为我们使用的是实体框架中的模型绑定。我们正在使用 Razor 语法。您还注意到我正在为最后一列中的每一行使用操作链接。这允许我编辑、删除或提供一行数据的详细信息。但是,我需要为此调用另一个控制器操作。例如,您有一个 Edit 控制器操作方法,该方法将单个 ISSUE 返回到 Edit View。

    @model IEnumerable<ISSUE>
    @{
    ViewBag.Title = "Knowledge Base Issues";
    Layout = "~/Views/Shared/_Layout.cshtml";
    }
    <h2 class="line">All Issues</h2>
    <p>
    @Html.ActionLink("Create New", "Create")
    </p>
    <table class="flat">
    <tr>
        <th>@Html.DisplayNameFor(model => model.KEYWORDS)</th>
        <th>@Html.DisplayNameFor(model => model.SUBJECT)</th>
        <th>@Html.DisplayNameFor(model => model.DATE_ENTERED)</th>
        <th></th>
    </tr>
    @foreach (var item in Model) {
    <tr>
        <td>@Html.DisplayFor(modelItem => item.KEYWORDS)</td>
        <td>@Html.DisplayFor(modelItem => item.SUBJECT)</td>
        <td>@Html.DisplayFor(modelItem => item.DATE_ENTERED)</td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.ISSUE_ID }) |
            @Html.ActionLink("Details", "Details", new { id=item.ISSUE_ID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.ISSUE_ID })
        </td>
    </tr>
    

    }

    【讨论】:

    • 基本上我需要在单选按钮旁边显示表格的所有记录,以便我可以选择特定选项。抱歉,我是 IEnumerable 的新手,GetIssueById 方法应该返回一个列表吗?从那个人口问题?
    • IEnumerable 只是一个可迭代的集合。我展示了一个场景,你可能有一对多的关系。您是否只是想显示所有数据的表格,并且在每一行中都有一个单选按钮,可以让您删除、编辑等记录?
    • 是的,这正是我想要实现的。试图显示该表的所有值,并在每一行旁边显示一个带有“编辑”和“删除”的链接。仍在处理那个
    • 这正是我所需要的。如果有任何其他问题,我将尝试实现此代码并更新...谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多