0

我有Database对象,每个对象代表磁盘上的文件:

这是我的对象:

public class MyObject
{
    public int id { get; set; }
    public string fileName { get; set; }
    public string browser { get; set; }    
    public string protocol { get; set; }    
    public string family { get; set; }
}

在我的主页中,我有按钮单击该按钮,该按钮导致页面中DropDownList的所有文件都按协议属性排序。family这是我的控制器,它返回具有某些(我的对象属性)的对象集合:

我的控制器:

    public ActionResult Index()
    {
        var list = db.Captures.Where(x => x.family == "Web").ToArray();
        list = list.Distinct(new MyObjectByProtocolComparer())
                   .OrderBy(x => x.fileName)
                   .ToArray();            

        ViewBag.Files = list;
        return View();
    }

我的 Index.cshtml 显示了我的协议列表:

<div>

        @Html.DropDownList("File", new SelectList(ViewBag.Files, "Id", "protocol_site"), "Select webmail site", new { style = "vertical-align:middle;" })
        <button type="button">Select</button>
    </div>

我想添加但不知道在从我的选择某些协议文件DropDownList并点击按钮后会收到列表我的所有具有此特定协议的文件。我读了这篇文章,但我不确定这是否是我想要的,在默认MVC网页中有删除、创建和详细信息链接,但我想要一些不同的东西,只需添加新按钮,从我的读取项目名称DropDownList并显示我的数据库结果在列表中。如果有人熟悉好的教程,我会很高兴学习,我不希望有人为我做我的工作,这不是我的风格,当然这不会帮助我理解MVC,但你需要明白我完全新的Web而不是 console\winforms 这看起来非常混乱和不清楚(带有设计和 html 的代码)

4

2 回答 2

0

<div>用表格包裹你。

@using (Html.BeginForm()) {
<div>
    @Html.DropDownList("File", new SelectList(ViewBag.Files, "Id", "protocol_site"), "Select webmail site", new { style = "vertical-align:middle;" })
    <button type="button">Select</button>
</div>
}

在您的控制器中实现POST请求处理程序。

[HttpPost]
public ActionResult Index(string File)
{
    ...
}

编写代码以返回或重定向到具有与协议匹配的文件列表的视图。

于 2013-11-10T19:14:42.577 回答
0

按钮“选择”需要由 MVC 中的 html FORM标记包装。cshtml 视图可以通过 @Html.BeginForm() 扩展方法呈现(参见帮助)。一旦你有了一个 html 表单,你可以通过设置这个按钮为“提交”类型,让用户能够将它发布回 Web 服务器。当用户推送它时,浏览器会收集 FORM 内的 html 元素的名称和值,例如inputselect但不包括标签等,将它们转换为键值对并通过 HTTP POST 请求发送到 Web 服务器到指定为 FORM 的 url属性(例如http://myHost.com/Foo/Bar)。
Web 服务器接收该请求并对其进行解析——包括 URL 查询字符串、标头,当然还有发布的数据。根据 MVC 约定和默认路由,http://myHost.com/Foo/Bar表示所有请求数据都应该转发到 Foo 控制器的 Bar 动作。内部操作 programemr 可以通过 HttpContext.Request.Form 集合访问 FORM 的值(以及许多其他请求信息)。但是.NET MVC 实现的另一个优点是模型绑定机制。它尝试根据键和参数名称的相等性将传入的 FORM 键值对映射到 Action 参数上(实际上,它更复杂)。因此,如果您的页面上有 /select name="myDdlId"/ html 标签,并且用户选择了 Id=123 的第一个选项并提交了表单,那么传入的 FORM 键值对将是“myDdlId=123”。一旦你为你的 Bar 动作提供了int myDdlId参数然后活页夹将自动用“123”作为键填充它,并且参数名称是相等的。不仅简单类型的参数可以在 Action 中使用 - 实际上,您可以使用 MyDdlId 整数属性创建自己的 MyModel 类 - 绑定器将实例化对象并设置其 MyDdlId=123。默认活页夹非常智能,可以满足大部分需求,但您也可以创建自己的活页夹。
因此,隐式绑定极大地帮助我们不去想 FORMs 值集合和键值对,我们只需提供一个带有特殊设计的对象作为参数的动作 - 瞧!- 立即用相应的值填充此对象。
一旦您获得了所选项目的 ID 并在您的数据库上执行了查询,您就可以为用户显示您的实体。您需要有另一个可以保存实体数组的视图模型类,例如 MyEntitiesViewModel。从数据库中获得非常大的业务实体后,您可以创建 MyEntitiesViewModel 的实例myEntitiesModel并使用所需的实体属性填充它。之后你写return View("~/Views/AllEntities.cshtml", myEntitiesModel); 这意味着您正在使用AllEntities.cshtml模板,将其与 myEntitiesModel 一起提供,呈现为 html 页面并发送回客户端。
这个有帮助吗?

于 2013-11-10T19:03:16.467 回答