Cách gán giá trị cho biến trong cshtml

Có cách nào để lấy giá trị của một biến trong mã Razor Page phía sau trang [cshtml. cs] từ trang cshtml?

Trang cshtml là những gì được hiển thị trong trình duyệt. Người dùng nhấp vào liên kết hoặc gửi biểu mẫu để gửi dữ liệu từ trình duyệt đến mã phía sau trên máy chủ

Tôi đã đọc ở đâu đó rằng bạn có thể làm điều này nếu biến của bạn là công khai hoặc được bảo vệ trong cshtml. cs, nhưng điều đó dường như không hiệu quả với tôi

Giống như trong mã C# thông thường, bạn có thể xác định các biến trong Razor, để lưu trữ thông tin để sử dụng sau này. Nếu bạn đã ở trong phạm vi mã, e. g. bên trong câu lệnh if hoặc cấu trúc điều khiển khác, bạn có thể định nghĩa nó ngay lập tức. Nếu bạn đang ở trong phạm vi đánh dấu, bạn có thể sử dụng khối mã Razor, như được mô tả trong bài viết trước, để xác định biến của bạn bên trong. Đây là một ví dụ

@{ 
    string helloWorldMsg = "Hello, world!";
}

Tất nhiên, bạn có thể xuất nó một cách dễ dàng, trực tiếp trong hoặc bên ngoài khối mã, bằng cách tham chiếu tên. Đây là một ví dụ về nó

@{ 
    string helloWorldMsg = "Hello, world!";
}


    @helloWorldMsg

Tất nhiên, bạn có thể làm việc và thao tác với các biến của mình và áp dụng logic cho chúng, giống như bạn làm trong C#

@{ 
    string helloWorldMsg = "Good day";
    if[DateTime.Now.Hour > 17]
    {
helloWorldMsg = "Good evening";
    }
    helloWorldMsg += ", world!";
    helloWorldMsg = helloWorldMsg.ToUpper[];
}


    @helloWorldMsg

Bản tóm tắt

Khai báo và sử dụng các biến trong Razor cũng dễ như sử dụng chúng trong mã C# thông thường của bạn. Như bạn sẽ thấy trong các ví dụ sau, việc truy cập dễ dàng vào các biến trong đánh dấu của bạn có thể thực sự hiệu quả.

ViewBag, ViewData, TempData và Session là

  • Cách hoạt động của ViewBag, ViewData, TempData và Session
    • ViewBag và ViewData
    • Dữ liệu tạm thời
    • Phiên họp
  • ASP. NET Core MVC - sẽ được thảo luận trong bài viết tiếp theo
    • ViewBag, ViewData, TempData và Session là gì
    • Cách hoạt động của ViewBag, ViewData, TempData và Session
  • A. Thiết lập môi trường MVC để kiểm tra mã

    Bước 1 - Tạo một ASP. ứng dụng NET MVC

    Chúng tôi sử dụng phiên bản hiện tại của Visual Studio 2019 16. 9. 4 và. Khung lưới 4. 8 để xây dựng ứng dụng,

    • Khởi động Visual Studio và chọn Tạo một dự án mới
    • Trong hộp thoại Tạo dự án mới, chọn ASP. NET ứng dụng web [. NET Framework] > Tiếp theo
    • Trong hộp thoại Định cấu hình dự án mới của bạn, nhập MVC cho Tên dự án > Tạo
    • Trong phần Tạo một ASP mới. NET Web Application, chọn MVC > Creat

    Lưu ý
    Đối với người mới bắt đầu, bạn có thể xem chi tiết tại đây.

    Bước 2 - Thêm ViewBag, ViewData, TempData và Session

    Trong Bộ điều khiển, cập nhật hành động HomeController/Index,

    namespace MVC.Controllers
    {
        public class HomeController : Controller
        {
            public ActionResult Index[]
            {
                List Student = new List[];
                Student.Add["Jignesh"];
                Student.Add["Tejas"];
                Student.Add["Rakesh"];
    
                this.ViewData["Student"] = Student;
                this.ViewBag.Student = Student;
                this.TempData["Student"] = Student;
                this.HttpContext.Session["Student"] = Student;
    
                return View[];
            }
    
            ......
        }
    }

    Trong Xem/Homw/Chỉ mục. cshtml,

    @{
        ViewBag.Title = "Home Page";
    }
    
    

    @*
      ViewBag @foreach [var student in ViewBag.Student] {
    • @student
    • }
    *@
      ViewData @foreach [var student in ViewData["Student"] as List] {
    • @student
    • }
      TempData @foreach [var student in TempData["Student"] as List] {
    • @student
    • }
      Session @foreach [var student in Session["Student"] as List] {
    • @student
    • }

    Kết quả,

    B. ViewBag, ViewData, TempData và Session là gì

    ViewBag, ViewData, TempData và Session là các tùy chọn để gửi giá trị từ bộ điều khiển tới chế độ xem hoặc tới các trang/phương thức hành động khác

    1, Chúng là thuộc tính của Controller trong MVC

    Cụ thể, ViewBag, ViewData và TempData là các thuộc tính của lớp ControllerBase, lớp này là cha của Lớp Trình điều khiển

    Trong khi Phiên là thuộc tính của lớp Trình điều khiển,

    2, Loại

    Tất cả chúng đều là Loại từ điển với chuỗi làm khóa, ngoại trừ ViewBag là loại động

    • ViewData --- hệ thống công khai. mạng. mvc. ViewDataDictionary ViewData { get;
    • ViewBag --- ViewBag động công khai { get;
    • Dữ liệu tạm thời --- hệ thống công khai. mạng. mvc. TempDataDictionary TempData { get;
    • Phiên --- hệ thống công cộng. mạng. Phiên HttpSessionStateBase { get;

    Ghi chú

    ViewBag là một trình bao bọc trên ViewData và cho phép lưu trữ và truy xuất các giá trị bằng cú pháp thuộc tính đối tượng thay vì cú pháp khóa-giá trị được sử dụng bởi các đối tượng từ điển. Nó làm như vậy bằng cách sử dụng tính năng kiểu dữ liệu động của. MẠNG LƯỚI

    C. Cách hoạt động của ViewBag, ViewData, TempData và Session

    1, ViewBag và ViewData

    Chúng có thể được sử dụng để truyền dữ liệu từ bộ điều khiển sang chế độ xem, chỉ một cách trong cùng một yêu cầu

    Ví dụ sau đây cho thấy nếu ViewBag được gán giá trị trong một hành động --- chỉ mục, nhưng cố truy xuất từ ​​chế độ xem khác --- Giới thiệu [hai chuyến đi, hai yêu cầu], nó sẽ không hoạt động

    Nhận xét ViewBag từ Index,

    Thêm mã vào Xem/Trang chủ/Giới thiệu. cshtml,

      ViewBag @foreach [var student in ViewBag.Student] {
    • @student
    • }

    Chạy ứng dụng, nó sẽ chuyển đến trang Chỉ mục, sau đó nhấp vào nút Giới thiệu để điều hướng đến trang Giới thiệu

    Chúng tôi gặp lỗi do giá trị được xác định trong ViewBag chỉ tồn tại trong cùng một hành động, trong cùng một yêu cầu, tôi. e. trong Chế độ xem/Trang chủ/Giới thiệu. cshtml truy xuất giá trị ViewBag, nó phải được xác định trong Action About,

    Sự khác biệt giữa ViewBag và ViewData,

    • Xem dữ liệu
      • Nếu truyền chuỗi vào ViewData thì không cần đánh máy
      • Nếu đối tượng đi qua trong ViewData thì bạn cần đánh máy nó nhưng trước đó, bạn cần kiểm tra xem nó có phải là null không
    • Xem túi
      • ViewBag là loại động nên không cần thiết phải đánh máy

    2, Dữ liệu tạm thời

    TempData được sử dụng để truyền dữ liệu từ chế độ xem sang bộ điều khiển, bộ điều khiển sang chế độ xem hoặc từ một phương thức hành động này sang phương thức hành động khác của cùng một bộ điều khiển hoặc bộ điều khiển khác

    TempData lưu trữ dữ liệu tạm thời và tự động xóa dữ liệu sau khi truy xuất giá trị. tôi. e. , Nó có thể được truy xuất một lần và chỉ một lần

    Chúng tôi demo cách TempData chuyển thông tin bằng ví dụ sau [bạn cần chạy ví dụ từ bước 1 đến bước 4, từng cái một]

    Bước 1 - Chuyển đến Chỉ mục hành động để xác định Dữ liệu tạm thời

    public ActionResult Index[]
    {
        List Student = new List[];
        Student.Add["Jignesh"];
        Student.Add["Tejas"];
        Student.Add["Rakesh"];
    
        this.ViewData["Student"] = Student;
        this.ViewBag.Student = Student;
        this.TempData["Student"] = Student;
        this.HttpContext.Session["Student"] = Student;
    
        return View[];
    }

    khi ở Chế độ xem. nhận xét TempData,

    @{
        ViewBag.Title = "Home Page";
    }
    
    

      ViewBag @foreach [var student in ViewBag.Student] {
    • @student
    • }
      ViewData @foreach [var student in ViewData["Student"] as List] {
    • @student
    • }
    @*
      TempData @foreach [var student in TempData["Student"] as List] {
    • @student
    • }
    *@
      Session @foreach [var student in Session["Student"] as List] {
    • @student
    • }

    Kết quả. không hiển thị TempData như mong đợi,

    Bước 2 - Chuyển đến Liên hệ hành động để không phải làm gì, nhưng trong Chế độ xem

    Truy xuất TempData["Student"], đồng thời xác định lại TempData["name"] = "Steve"

    ________số 8

    Kết quả. hiển thị dữ liệu TempData["Student"] đã truy xuất

    Bước 3 - Chuyển đến Hành động Giới thiệu

    Truy xuất TempData["name"] và xác định lại TempData["Student"]

    public ActionResult About[]
    {
        ViewBag.Message = "Your application description page.";
    
        if [TempData["name"].ToString[] == "Steve"]
        {
            List Student = new List[];
            Student.Add["Jignesh"];
            Student.Add["Tejas"];
            Student.Add["Rakesh"];
    
            this.ViewData["Student"] = Student;
            this.ViewBag.Student = Student;
            this.TempData["Student"] = Student;
            this.HttpContext.Session["Student"] = Student;
        }
        return View[];
    }

    Lượt xem. hiển thị TempData["Sinh viên"]

    @{ 
        string helloWorldMsg = "Hello, world!";
    }


        @helloWorldMsg
    0

    Kết quả. như mong đợi. hiển thị TempData["Student"]

    Bước 4

    Cuối cùng, Quay lại Click Liên hệ. thử truy xuất TempData["Student"] lần thứ hai, chúng tôi nhận được thông báo lỗi,

    Cuối cùng, chúng ta nên đề cập đến,

    • TempData Lưu vào phiên để khi hết phiên làm mất dữ liệu;
    • TempData xóa một giá trị khóa sau khi được truy cập, bạn vẫn có thể giữ nó cho yêu cầu tiếp theo bằng cách gọi phương thức
      @{ 
          string helloWorldMsg = "Hello, world!";
      }


          @helloWorldMsg
      1
    • @{ 
          string helloWorldMsg = "Hello, world!";
      }


          @helloWorldMsg
      2 thường được sử dụng để chuyển thông báo lỗi hoặc điều gì đó tương tự

    3, Phiên

    • Phiên lưu trữ dữ liệu vào phiên
    • Phiên này không giống với TempData để truy cập nhưng bạn có thể đọc bao nhiêu lần tùy thích
    • Phiên không bao giờ trở thành vô giá trị cho đến khi hoặc trừ khi hết thời gian phiên hoặc phiên hết hạn
    • Phiên không phải là một cách thực hành tốt để sử dụng phiên thường xuyên hoặc lưu trữ dữ liệu lớn, nó ảnh hưởng đến hiệu suất

    Bản tóm tắt

    Bài viết này thực sự đã thảo luận về ASP. NET MVC ViewBag, ViewData, TempData và Session. Chúng tôi sẽ rời khỏi ASP. NET Core MVC để cùng thảo luận trong bài viết tiếp theo

    Chủ Đề