Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Cách truyền giá trị của textbox vào tham số của controller ASPNET MVC

  1. #1
    Ngày gia nhập
    02 2011
    Bài viết
    36

    Mặc định Cách truyền giá trị của textbox vào tham số của controller ASPNET MVC

    Hi all
    Mình mới tìm hiểu về aspnet MVC nhưng có 1 chỗ không hiểu nên nhờ các bạn giúp.

    Mình chỉ làm chức năng tìm kiếm đơn giản theo sản phẩm.
    Views TimKiem có 2 trang là Index.aspx để nhập yêu cầu tìm kiếm và trang Results.aspx để hiển thị kết quả.
    Code trong Controller:
    Code:
    public ActionResult Results(string query)
            {            
                ViewData["Title"] = "Danh mục sản phẩm";
                //SanPham sp = data.SearchBySanPham(query);
                SanPham sp = data.SanPhams.Single(p => p.TenSanPham == query);
                return View("Results",sp);
            }
    Code trong trang Index.aspx:
    Code:
    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
    <asp:Content ID="viewTiemKiem" ContentPlaceHolderID="MainContent" runat="server">
    
        <%using (Html.BeginForm("Results", "TimKiem"))
          { %>
          <%=Html.TextBox("txtSearch")%>
          <input type="submit" value="Search" />
          <%} %>
    
    </asp:Content>
    Cho mình hỏi là làm thế nào để truyền giá trị từ textbox txtSearch vào biến query của controller được.

    Code trong file Global.asax.cs:

    Code:
    routes.MapRoute(
                    "TimKiem", "TimKiem/{action}/{query}",
                    new { controller = "TimKiem", action = "Results", id = UrlParameter.Optional }
                    );
    Và trong trang Results.aspx của mình:
    Code:
    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<List<MvcApp.Models.SanPham>>" %>
    <asp:Content ID="viewResults" ContentPlaceHolderID="MainContent" runat="server">
    
        <%foreach(var lst in ViewData.Model)
          {%>
            <%=Html.Action(lst.DonGia.ToString(),"Results/"+lst.TenSanPham,"SanPham") %>
        <%} %>
    </asp:Content>
    Mong các bạn giúp đỡ. Mình làm hoài kg ra. :d

  2. #2
    Ngày gia nhập
    03 2008
    Bài viết
    71

    1. Bạn đổi <%=Html.TextBox("txtSearch")%> thành <%=Html.TextBox("query")%>
    2. Câu lệnh return View("Results",sp); sẽ sinh ra lỗi vì view của bạn nhận 1 List of SanPham chứ không phải 1 sản phẩm đơn. Và thêm nữa, câu lệnh Single sẽ trả về đúng 1 (và chỉ 1) đối tượng, nếu danh sách của bạn (tức những sản phẩm thỏa mãn p.TenSanPham == query) có 0 hoặc > 1 đối tượng, nó sẽ phát ra exception. Bạn có thể sửa câu:
    SanPham sp = data.SanPhams.Single(p => p.TenSanPham == query);
    thành:
    var sp = (from p in data.SanPhams where p.TenSanPham == query select p).ToList();
    3. Nếu muốn tạo 1 link để chỉ đến 1 sản phẩm với tên nào đó, bạn viết:
    Url.ActionLink(lst.DonGia.ToString(), "Results", "SanPham", new { query = productName })

  3. #3
    Ngày gia nhập
    03 2011
    Bài viết
    67

    Thầy ơi cho em hỏi vậy tìm kiếm tương đối thì mình làm như thế nào thầy .

  4. #4
    Ngày gia nhập
    03 2008
    Bài viết
    71

    tìm kiếm tương đối là sao? kiểu như dùng % trong SQL à?

  5. #5
    Ngày gia nhập
    06 2009
    Bài viết
    54

    Có 2 cách như nhau và mình thường áp dụng.

    Cách 1: vì bạn dùng Page kia ở dạng List<View...> nên nó không nhận các sự kiện click button trên web để trả lại cho Controller. Với cách này, ở sự kiện onclick của button, bạn gọi tới javascript, từ javascript đó sẽ nhảy lại vào Controller.

    Ví dụ:
    Code:
    <input type="button" value="Search" onclick="TimKiem()">
    <script type="text/javascript">
        function     TimKiem()
    {
        var id =  document.getElementById('txtSearch').value;
        document.location.href ='/Results/' + id;
    </script>
    }

    Cách 2: khi tạo view cho trang Index, bạn không để là List nữa mà sẽ chọn là Create, khi đó viết sự kiện Post cho phần Index(string query). Với cách này thì bạn chỉ cần dùng 1 trang chứ không cần phải 2.

Các đề tài tương tự

  1. Cơ chế truyền dữ liệu giữa Controller và View trong ASP.NET MVC3?
    Gửi bởi canloimat87 trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 8
    Bài viết cuối: 08-05-2013, 10:59 AM
  2. Phân biệt truyền biến bằng tham trị, tham chiếu, địa chỉ. Xin cảm ơn.
    Gửi bởi thaoha trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 18-02-2012, 02:03 PM
  3. [ASPNET MVC]Cách truyền giá trị của textbox vào tham số của controller
    Gửi bởi vanthuong420 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 4
    Bài viết cuối: 31-10-2011, 11:18 AM
  4. Kỹ thuật C++ Truyền tham biến hay tham trị?
    Gửi bởi vietanh_90 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 18
    Bài viết cuối: 16-10-2011, 10:45 PM
  5. Thắc mắc về truyền tham biến và tham trị .. và còn nữa ^^
    Gửi bởi without_you trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 04-02-2010, 08:46 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn