2010-09-14 28 views
5

Tôi muốn vượt qua một đối tượng chuỗi thành một Xem:ASP.NET MVC Một vấn đề với đi qua một đối tượng chuỗi thành Xem

<%@ Page Title="" Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<String>" %> 

    <asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 

      <h2><%=Model %></h2> 

    </asp:Content> 

Khi tôi cố gắng này:

return View("SomeView", "stringToPass"); 

lỗi xảy ra: Chế độ xem 'SomeView' hoặc chủ của nó không được tìm thấy.

nhưng, khi tôi thay đổi trở lại

return View("SomeView"); 

tất cả mọi thứ hoạt động tốt. Vậy làm thế nào để vượt qua chuỗi đó?

Trả lời

4

Sử dụng ViewData cho việc này. Trong điều khiển của bạn, chỉ cần đặt cặp khóa/giá trị:

ViewData["Foo"] = "bar"; 

Sau đó, trong View của bạn, chỉ cần truy cập vào nó cũng giống như bạn muốn cài đặt nó trước đây:

<h2><%=ViewData["Foo"]%></h2> 

Vấn đề bạn đang gặp là các thông số của 2 phương thức View() là: Xem tên và Tên chính.

+0

+1 tính năng này sẽ hoạt động. Lưu ý rằng OP vẫn có thể làm điều đó như anh muốn, xem câu trả lời của tôi. – eglasius

+3

ViewData [loosegooseybag] rất hiếm khi có câu trả lời. .. –

+0

@ Wyatt: thực sự, nhưng có vẻ như nó đã hoạt động cho OP. Tò mò về việc nhận được một downvote cho câu trả lời đơn giản mặc dù. : | Không phải đề nghị đó là bạn. Làm thế nào nó có thể nhận được một -1 cho là một câu trả lời được chấp nhận là khó hiểu. –

2

Nếu bạn đang trong vòng "SomeView" phương pháp hành động của bạn:

return View("StringToPass"); 

Nếu bạn đang trong một phương pháp hành động khác nhau:

return RedirectToAction("SomeView", new { x = "StringToPass" }); 

EDIT Tôi đoán tùy chọn 1 sẽ không làm việc với một chuỗi. Tôi chưa bao giờ thử nó b/c tôi luôn luôn sử dụng ViewModels:

public class UserAdminViewModel 
    { 
     public string UserName { get; private set; } 

     public UserAdminViewModel(string userName) 
     { 
      UserName = userName; 
     } 
    } 

Sau đó, bạn sẽ

return View(new UserAdminViewModel("StringToPass")); 
+0

điều này là sai, đầu tiên sẽ tìm kiếm chế độ xem StringToPass và Tôi không nghĩ rằng sau này sẽ làm việc ... chỉ cần nhìn thấy chỉnh sửa -> bạn chắc chắn có thể vượt qua một chuỗi để xem mà không có một ViewModel. – eglasius

+0

RedirecttoAction hoạt động giả sử bạn có một phương thức hành động lấy chuỗi x. Với ViewModel, các trường hợp của tôi phức tạp hơn việc đặt chuỗi. – RememberME

+0

có, không có nghĩa là nó trông giống như tôi không thích mô hình xem, tôi chắc chắn sử dụng chúng, nhưng bạn chắc chắn có thể vượt qua một giá trị chuỗi đơn giản như mô hình nếu bạn muốn. – eglasius

2

Lớp Chế độ xem có hàm tạo của Chế độ xem ("string1", "string2") trong đó string1 là tên của chế độ xem và chuỗi2 là tên của trang chính. Vấn đề là bạn đang đi qua trong hai chuỗi vì vậy nó giả định bạn có nghĩa là để gọi rằng phương pháp quá tải.

3

gì về

ViewData.Model = "StringToPass"; 
return View("SomeView"); 
11

nó gây nhầm lẫn nó với một tình trạng quá tải của View(), làm:

return View("SomeView", (object)"stringToPass"); 
0

Cũ câu hỏi, nhưng tôi sẽ đưa ra một ví dụ về cách vượt qua chuỗi các Xem bằng cách sử dụng một mô hình (không sử dụng Viewbag đã được trả lời)

// Action Method inside controller 
    public ActionResult Index() 
    { 
     string msg = "Hello World"; 
     return View("Index","",msg); // notice the blank second parameter 
    } 

    // This goes inside the Index View 
    // Will print, The Message is: Hello World 
    The Message is: @Model.ToString() 
Các vấn đề liên quan