2011-04-06 54 views
16

我有一個加載_Search.cshtml 局部視圖,看起來像這樣一個簡單的Wall.cshtml視圖標準方式:MVC 3(剃刀) - 使用按鈕事件調用控制器

<h2>The Wall</h2> 
@{Html.RenderPartial("~/Views/Search/_Search.cshtml");} 

的_Search.cshtml局部視圖(基於@Darin回覆更新)看起來是這樣的:

@using (Html.BeginForm("Searching", "Search", FormMethod.Post, new { id = "searchForm" }))  
{ 
    <div id="search"> 
     <div id="searchbtn"> 
      <input id="Search" type="button" value="Search" /> 
     </div> 
     <div id="searchtxt"> 
      @Html.TextBox("txtSearch") 
     </div> 
    </div> 
} 

的控制器是這樣的:

public class SearchController : Controller 
{ 
    public ActionResult Wall() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Searching() 
    { 
     // do something with the search value 
     return View(); 
    } 
} 

當我運行應用程序,生成的HTML塊產生看起來是這樣的:

<form action="/Search/Searching" id="searchForm" method="post"> 
    <div id="search"> 
     <div id="searchbtn"> 
      <input id="Search" type="button" value="Search" /> 
     </div> 
     <div id="searchtxt"> 
      <input id="txtSearch" name="txtSearch" type="text" value="" /> 
     </div> 
    </div> 
</form> 

問題1:爲什麼會點擊按鈕從不打搜索控制器方法?
(讓我重申_Search.cshtml是在名爲Wall.cshtml的視圖內運行的部分視圖)。

問題2:如何獲得「txtSearch」文本框內的值?

問題3:由於這是一個局部視圖,我該如何使包含當前搜索部分視圖..的視圖以搜索查詢的結果進行刷新和更新?

回答

17

這將是更好地使用表格及搜索按鈕提交:

@using (Html.BeginForm("Search", "Home", FormMethod.Post, new { id = "searchForm" }))  
{ 
    <div id="search"> 
     <div id="searchbtn"> 
      <input id="Search" type="submit" value="Search" /> 
     </div> 
     <div id="searchtxt"> 
      @Html.TextBox("txtSearch") 
     </div> 
    </div> 
} 

至於你的第二個問題而言,你可以AJAXify這種搜索形式:

$(function() { 
    $('#searchForm').submit(function() { 
     $.ajax({ 
      url: this.action, 
      type: this.method, 
      success: function(result) { 
       $('#resultContainer').html(result); 
      } 
     }); 
     return false; 
    }); 
}); 

哪裏resultContainer可能是一些div,將包含控制器操作返回的搜索結果。

+0

解決方法1是我做的事之前,但作爲對更新的原始答覆指出,按一下按鈕永遠不會到達搜索控制器方法。 – 2011-04-06 16:51:22

+0

@Filu,以及在FireBug中檢查請求時會發生什麼?沒有到達控制器的原因是什麼? – 2011-04-06 18:14:25

+0

我必須承認,我從來沒有用過Firebug。我剛安裝它。當我點擊按鈕時我要查找什麼? – 2011-04-07 08:05:06

2

的問題是,<input id="Search" type="button" value="Search" />
具有類型= BUTTON

我改變了類型爲INPUT ...和固定的問題。

+0

type = submit也應該在這裏工作 – jcolebrand 2011-07-25 17:38:34

0

不要忘了序列化的數據也模型推到控制器動作:

@model CBS.DataAccess.Entities.SupplierQuoteEntity  
@using (Html.BeginForm("Create", "SupplierQuote", FormMethod.Post, new { id = "SupplierQuoteCreateForm" })) 
{ 
    <div>blablablabla fields...</div> 

    <a class="t-button t-button-icontext" onclick="ajaxSubmit()"><span class="t-icon t-insert"></span>Create</a> 

    <script type="text/javascript"> 
     function ajaxSubmit() { 
      var formData = $("#SupplierQuoteCreateForm").serializeArray(); 

      $.ajax({ 
       type: "POST", 
       url: '@Url.Action("Create", "SupplierQuote")', 
       data: formData, 
       dataType: "json", 
       success: function (data) { 
        alert(data); 
       } 
      }); 
     }   
    </script>  
}