2012-03-07 65 views
0

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

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

然后Url.Action很简单:

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

现在,这一切都工作得很好。但我必须发送一个List对象,我通过提交一个表单来完成这一切工作。

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

谢谢。

回答

1

我不明白你需要什么,但我认为你有一些项目选择从用户可能使用复选框或任何。

答案可能是此链接:CheckboxList in MVC3.0

基本上你有什么做的是:创建一个接收一个列表或者一个IEnumerable的项目的操作,把你的形式张贴到这一行动。

我做了一个示例代码也可以帮助:

你可以有一个产品型号:

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> 
+0

嗨菲利普感谢您的答复。我需要获取ActionResult返回值,以便我可以将它作为参数传递给一个jquery函数,该函数将显示在对话框中返回的页面,而不是更改当前网页。因此,我以前使用: onclick =“'myjquery.showInDialog(Url.Action(”CheckItem“,new {isCorrect = true,id = 2}))'' 然后在弹出窗口中显示网页。但现在我必须提交一份表格,所以我想知道我将如何做到这一点,并得到回应。 – TBD 2012-03-09 10:48:56