Asp.net MVC获取一个动作方法的完全限定URL

时间:2012-03-07 09:51:54

标签: asp.net-mvc

项目中的现有代码使用Url.Action获取要在对话框中显示的完全限定的URL。所以它有一个看起来像的控制器功能:

public ActionResult CheckItem(bool isCorrect, string id){}

然后Url.Action就是:

Url.Action("CheckItem", new { isCorrect =  true, id = 2})

现在一切正常。但我必须发送一个List<>对象,我通过提交表单来完成所有工作。

所以我的问题是:有没有办法使用Url.Action提交表单?如果不是,提交表单并获取URL的最佳方式是什么。

感谢。

1 个答案:

答案 0 :(得分:1)

我并不完全明白你需要什么,但我认为你从用户那里选择一些项目可能会使用复选框或其他任何东西。

答案可能在以下链接:CheckboxList in MVC3.0

基本上你需要做的是:创建一个接收List或IEnumerable项目的Action,并将你的表单放到POST那个Action上。

我也制作了一个可以提供帮助的示例代码:

你可以有一个Item模型:

using System;

namespace SandboxMvcApplication.Models
{
    public class Item
    {
        public int Id { get; set; }
        public string Title { get; set; }
    }
}

你的控制器可能是:

public class HomeController : Controller
{
    List<Item> itemList = new List<Item>() {
            new Item() { Id = 1, Title = "Item 1" },
            new Item() { Id = 2, Title = "Item 2" },
            new Item() { Id = 3, Title = "Item 3" }
        };

    public ActionResult Index()
    {
        return View(itemList);
    }

    public ActionResult ProcessForm(int[] items)
    {
        var selectedItems = new List<Item>();
        foreach (var item in items)
        {
            selectedItems.AddRange(itemList.Where(i => i.Id == item));
        }

        return View("Success", selectedItems);
    }
}

索引视图(〜/ Views / Home / Index.cshtml):

@model List<SandboxMvcApplication.Models.Item>

@{
    ViewBag.Title = "Home Page";
}

<form action="@Url.Action("ProcessForm")" method="post">
    <ul>
        @foreach (var item in Model)
        {
            <li><input type="checkbox" name="items" value="@item.Id" />@item.Title</li>
        }
    </ul>

    <input type="submit" value="Send selected items"/>
</form>

最后是一个成功视图,显示用户选择了哪些项目:

@model List<SandboxMvcApplication.Models.Item>

@{
    ViewBag.Title = "Success";
}

<h2>Success: Selected items were</h2>

<ul>
@foreach (var item in Model)
{
    <li>@item.Id => @item.Title</li>            
}
</ul>