2014-08-27 32 views
5

Tôi đã làm như thế này.Làm thế nào để vượt qua đối tượng như tham số ẩn với RedirectToAction?

public ActionResult GetInfo(SomeModel entity) 
{ 
    ---- 
    return RedirectToAction("NewAction", "NewController", new System.Web.Routing.RouteValueDictionary(entity)); 
} 

hành động đó được gọi là

public ActionResult NewAction(SomeModel smodel) 
{ 
    ------- 
    ------- 
} 

này đang làm việc tốt nhưng tôi có thể xem tất cả các giá trị param đăng trên thanh địa chỉ của trình duyệt, làm thế nào tôi có thể ẩn các giá trị param chuỗi truy vấn trong trình duyệt.

http://localhost:51545/NewController/NewAction?SurveyID=13&CatID=1&PrimaryLang=1&SurveryName=Test%20Survery&EnableMultiLang=False&IsActive=False 

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

8

Trong trường hợp của bạn thay vì sử dụng RouteValueDictionary và chuyển mô hình từ chuỗi truy vấn thử TempData (bởi vì khi chúng ta sử dụng RedirectToAction nó sẽ làm cho một tuyến đường yêu cầu http và đối tượng mới sẽ được hiển thị trong url nên không phải là một cách tiếp cận tốt của nó để hiển thị dữ liệu nhạy cảm trong url).

Sử dụng TempData như: -

public ActionResult GetInfo(SomeModel entity) 
{ 
    ---- 
    TempData["entity"] = entity; //put it inside TempData here 
    return RedirectToAction("NewAction", "NewController"); 
} 

public ActionResult NewAction() 
{ 
    SomeModel smodel = new SomeModel(); 
    if(TempData["entity"] != null){ 
    smodel = (SomeModel)TempData["entity"]; //retrieve TempData values here 
    } 
    ------- 
    ------- 
} 

Lợi ích của việc sử dụng TempData ở đây là nó sẽ giữ lại giá trị của nó cho một chuyển hướng và hơn nữa mô hình sẽ được nhân vận chuyển đến một hành động điều khiển và một khi bạn đọc dữ liệu từ TempData dữ liệu của nó sẽ được xử lý tự động và nếu bạn muốn giữ lại giá trị TempData sau khi đọc thì hãy sử dụng TempData.keep("entity").


HOẶC

Nếu xem của bạn là trong cùng một điều khiển thì đây là một giải pháp đơn giản cho vấn đề của bạn:

public ActionResult GetInfo(SomeModel entity) 
{ 
    ---- 
    return NewAction(entity); 
} 

public ActionResult NewAction(SomeModel smodel) 
{ 
    ------- 
    ------- 
    return View("NewAction",smodel) 
} 

Như đúng nhận xét của @ Chips_100 để im trong đó có nó ở đây: - Các giải pháp đầu tiên sẽ thực hiện chuyển hướng thực (302) sẽ cập nhật URL trong trình duyệt của người dùng. Giải pháp thứ hai sẽ cho kết quả mong muốn trong khi vẫn giữ URL gốc trong thanh địa chỉ.

+0

Trông quá phức tạp. Không có cách nào để thực hiện chuyển hướng phía máy chủ? –

+0

@ PhilipPittle..what phức tạp .. chỉ cần bạn đã đặt mô hình bên trong tempdata và sau đó typecast tempdata vào mô hình trên hành động mong muốn .. những gì là phức tạp trong nó ?? –

+0

@ Ngoại lệ: Cảm ơn nó hoạt động @ Philip Pittle: Một số gợi ý hiệu quả hơn nếu có sẽ được đánh giá cao. –

Các vấn đề liên quan