2012-11-05 7 views
5

Tôi khá mới đối với MVC và đang gặp khó khăn khi định tuyến khi cố gắng chuyển nhiều thông số qua URL.Chuyển nhiều thông số từ url đến html.actionlink

Từ một trang với URL: /PersonCAFDetail/Index/3?memberid=4

... Tôi đang cố gắng để có được một Html.ActionLink thiết để trỏ đến Create hành động như vậy mà id = 3 và memberid = 4.

Sau khi đọc một số bài viết tương tự có vẻ như những điều sau đây nên làm việc:

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

Tuy nhiên, điều này dẫn đến một URL được tạo ra như sau:

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

Tôi có một bộ tuyến đường lên dưới dạng:

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

Bộ điều khiển chấp nhận hai tham số như sau:

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(); 
     } 

Bất kỳ trợ giúp nào được đánh giá cao.

------- chỉnh sửa cho mô hình ----------

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; } 
    } 
} 

Trả lời

10

Cuối cùng, bạn cần phải vượt qua hai tham số để xem:

hành động

Index:

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) 

Và C quái cú pháp tuyến đường của bạn ... id = @ "\ d +"

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

Tôi đang cố gắng chuyển tham số để các giá trị sẽ thay đổi. Tôi cần biết cách chuyển các giá trị tham số vào "id" và "memberid". Nếu cú ​​pháp tuyến đường không có ID được đặt bằng ký tự đại diện có chữ số hay không? – melkisadek

+0

Ok, vui lòng cho biết cách bạn xác định mô hình hoặc ViewBag thành chế độ xem – Mate

+0

Nếu sử dụng chế độ xem Được nhập mạnh, hãy kiểm tra dòng đầu tiên trong .cshtml ... @model "YourViewModel". Hoặc nếu bạn gửi giá trị trong ViewBag giống như ViewBag.MemberID? – Mate

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

..is những gì bạn đang sử dụng. Những thông số như sau:

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

Bạn đang đặt dữ liệu của bạn vào tham số thuộc tính, mà tự nhiên sẽ làm cho họ thuộc tính liên kết của bạn (thay vì trong số đó là các giá trị đường).

Cách sử dụng Ví dụ:

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

Tôi có thể đặt hai thông số vào và nếu có, làm cách nào? – melkisadek

+0

Có, chúng là các đối tượng ẩn danh .. giống hệt như các thuộc tính. Tôi sẽ chỉnh sửa bài đăng của mình. –

+0

Tôi nhận được một lỗi trên ViewModel không phải là một phần của bối cảnh hiện tại. Nó phải được? Tôi chủ yếu sử dụng mã scaffolded với một vài tinh chỉnh ... – melkisadek

0

Nguyên nhân mà Url.Action của bạn không làm việc là & char trong url được mã hóa, vì vậy bạn phải sử dụng

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

bây giờ, Nó làm việc;)