2012-11-05 125 views
5

我對MVC相當陌生,當我嘗試通過URL傳遞多個參數時,我正在努力應付路由。將多個參數從url傳遞給html.actionlink

從與URL的網頁:/PersonCAFDetail/Index/3?memberid=4

...我試圖讓一個Html.ActionLink設置爲指向創建行動使得ID = 3和MEMBERID = 4。

看了一些類似的帖子,似乎下面應該工作:

@Html.ActionLink("Create New", "Create", null, new { memberid = "memberid" }) 

然而,這導致URL被創建如下:

<a href="/PersonCAFDetail/Create/3" memberid="memberid">Create New</a> 

我有一個路由集合up:

routes.MapRoute(
     name: "PersonCAFDetail", 
     url: "PersonCAFDetail/Create/{id}/{memberid}", 
     defaults: new { controller = "PersonCAFDetail", action = "Create", id = "@\d+", memberid = @"\d+" }       
     ); 

控制器接受兩個參數如下:

public ActionResult Create(int id, int memberid) 
     { 
      int cafID = id; 
      int personID = memberid; 
      ViewBag.detailTypeID = new SelectList(db.tCAFDetailTypes, "detailTypeID", "detailType"); 
      ViewBag.cafID = new SelectList(db.tFamilyCAFs, "cafID", "issues"); 
      ViewBag.personID = new SelectList(db.tPersons, "personID", "forename"); 
      return View(); 
     } 

任何幫助表示讚賞。

-------編輯的模型----------

namespace WhatWorks.Models 
{ 
    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.Mvc; 
    using System.ComponentModel.DataAnnotations; 

    public partial class tPersonCAFDetail 
    { 
     [Key, HiddenInput(DisplayValue=false)] 
     public int cafID { get; set; } 

     [Key, HiddenInput(DisplayValue = false)] 
     public int personID { get; set; } 

     [Key, HiddenInput(DisplayValue = false)] 
     public int detailTypeID { get; set; } 

     [Required, DataType(DataType.MultilineText)] 
     public string notes { get; set; } 


     public string FullName 
     { 
      get 
      { 
       return tPerson.forename + " " + tPerson.surname; 
      } 
     } 

     public virtual tCAFDetailType tCAFDetailType { get; set; } 
     public virtual tFamilyCAF tFamilyCAF { get; set; } 
     public virtual tPerson tPerson { get; set; } 
    } 
} 

回答

10

最後,你需要傳遞兩個參數給視圖:

索引操作:

public ActionResult Index(int id, int memberid) 
{ 
    ... 
    ViewBag.cafID = id; 
    ViewBag.personID = memberid; 
    return View(); 
} 

Index.cshtml

@Html.ActionLink("Create New", "Create", "PersonCAFDetail", new { id=ViewBag.cafID , memberid =ViewBag.personID}, null) 

與C赫克路線語法... ID = @ 「\ d +」

routes.MapRoute(
    name: "PersonCAFDetail", 
    url: "PersonCAFDetail/Create/{id}/{memberid}", 
    defaults: new { controller = "PersonCAFDetail", action = "Create", id = @"\d+", memberid = @"\d+" }       
    ); 
+0

我想傳遞參數,所以值會有所不同。我需要知道如何將參數值傳遞給「id」和「memberid」。路線語法是否不具有用數字通配符設置的ID? – melkisadek

+0

好的,請展示如何將模型或ViewBag定義到視圖 – Mate

+0

如果使用強類型視圖,請檢查.cshtml的第一行... @model「YourViewModel」。或者,如果您在ViewBag中發送類似ViewBag.MemberID的值? – Mate

0
Html.ActionLink(string, string, object, object) 

..是你使用的是什麼。這些參數如下:

Html.ActionLink(<link text>, <action name>, <route values>, <html attributes> 

你把你的數據到屬性參數,這自然會使得它們屬性的鏈接(而不是將它們路由值)。

用例:

@Html.ActionLink("Create new", "Create", new { id = Model.cafID, memberid = Model.personID }, null); 
+0

我可以將兩個參數放入<路由值>中嗎?如果是這樣,怎麼辦? – melkisadek

+0

是的,它們是匿名對象。與屬性完全相同。我將編輯我的帖子。 –

+0

我在ViewModel上看到一個錯誤,它不是當前上下文的一部分。它應該是?我主要使用腳手架代碼進行一些調整... – melkisadek

0

原因,你Url.Action不工作是,在URL中的字符&編碼,所以你必須使用

@Html.Raw(Html.ActionLink("Create New", "Create", "PersonCAFDetail", new { id=ViewBag.cafID , memberid =ViewBag.personID}, null)) 

現在,它的工作;)