ASP.NET MVC 4 - ListBoxFor,在 ActionLink 中发送 selectedValue

Posted

技术标签:

【中文标题】ASP.NET MVC 4 - ListBoxFor,在 ActionLink 中发送 selectedValue【英文标题】:ASP.NET MVC 4 - ListBoxFor, send selectedValue in ActionLink 【发布时间】:2014-09-09 16:45:34 【问题描述】:

我有一个模型列表。我想检索 listBoxSelectedValue 以将其发送到我的 actionLink 中以进行编辑。

这是我的看法:

@using (html.BeginForm())

    @Html.ListBoxFor(a => a.SelectedApplis, new SelectList(ViewBag.Applis,"ID","Name", Model.SelectedApplis))<br/>
    @Html.ActionLink("Add","Create","Application")<br/>
    @Html.ActionLink("Edit","Edit","Application", null, new  listAppId = Model.SelectedApplis)<br/>
    @Html.ActionLink("Delete","Delete","Application")<br/>
  

我用 List 创建了一个类“ListBoxApplication”,其中包含 ListBox 的 selectedValue。

public class ListBoxApplication

    public IEnumerable<int> SelectedApplis  get; set; 

    public ListBoxApplication()
    
        SelectedApplis = new List<int>();
    

我有 2 个控制器:应用程序和主页

在 HomeController 中,我创建了包含列表的模型 ListBoxApplication。在我的 ViewBag.Applis 中,我拥有所有的 ApplicationModel。

    public ActionResult Index()
    
        ListBoxApplication listeApplis = new ListBoxApplication();

        ViewBag.Applis = ApplicationModels.GetListApplications();
        return View(listeApplis);
    

在我的 ApplicationController 中:

    public ActionResult Edit(ListBoxApplication listAppId)
    
        // I WANT TO RETRIEVE MY listAppId HERE, but it is always 'null'
        return View();
    

所以我认为我的问题出在 actionLink 中:

@Html.ActionLink("Edit","Edit","Application", null, new  listAppId = Model.SelectedApplis)

Me Edit Method 不是实际的控制者(Home/Index)。我需要将我的 actionLink 中的 ListBox 的 selectedValue 发送到(应用程序/编辑)。

listAppId 始终为“空”。它没有检索到值...我的 actionLink 有错误吗?

感谢提前

【问题讨论】:

从您发布的代码看来,ApplicationModels.GetListApplications() 正在返回 null。 我填写了我的应用程序列表。它们显示在我的列表框中。所以 GetListApplications() 正在运行。 所以 Edit 需要一个 ListBoxApplication 并且您正在发送一个 IEnumerable?这就是我所看到的吗? 抱歉,我之前正在测试输入,但忘记在我的帖子中更改它...我的编辑方法需要一个 IEnumerable。 【参考方案1】:

我不认为操作链接会触发对服务器的回发。试试这个:

    @Html.ActionLink("Delete","Delete","Application")<br/>
    @Html.ActionLink("Add","Create","Application")<br/>

    @using (Html.BeginForm("Detail","Application"))
    
        @Html.ListBoxFor(a => a.SelectedApplis, new SelectList(ViewBag.Applis)) //not sure what the other params you had here were for, but it should work like this
        <br/>
        <input type="submit" name="Edit" value = "Edit"/>
        @*added in response to comment*@
        <input type="submit" name="Delete" value = "Delete"/>
        <input type="submit" name="Add" value = "Add"/>
      

如果您计划将所有这些按钮回传到服务器,您也可以使用 ajax(和 javascript)来实现同样的目标,而无需为每个单独的按钮编写表单。这两种方式都可以正常工作,但多种形式在技术上更容易。

public ActionResult Detail(ListBoxApplication listAppId, bool Edit, bool Add, bool Delete)

    if(//check your bools here)
    
    return View();

【讨论】:

谢谢您,我认为您是对的,我们不能在一个表单中包含多个操作链接...但是您说的是多个表单。我怎样才能用一个列表框为每个动作链接创建 3 个表单? listBox 只会是一种形式,不是吗?还是有别的办法? 好的,所以有几种方法可以做到这一点,一种方法是将所有的操作链接变成提交按钮(参见上面的代码)并将值更改为您想要显示的文本。现在每个点击时(假设它们在表单中,将提交给服务器),现在如果你给他们每个人一个名字,并将该名字作为参数添加到你的控制器,作为一个字符串或一个布尔值,然后您将能够确定单击了哪个按钮。 (在我的回复中给我一分钟模拟控制器)

以上是关于ASP.NET MVC 4 - ListBoxFor,在 ActionLink 中发送 selectedValue的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 4 模型验证

asp.net mvc 4 贝宝集成

ASP.NET MVC+JQueryEasyUI1.4+ADO.NET Demo

在 ASP.NET MVC 4 中添加服务引用

ASP.NET MVC 4 Bundles和显示模式

VS 2015 ASP.NET 4 MVC 5 中的打字稿 - 设置和选择的工作组合是啥?