2011-09-03 157 views
0

我是jQueryUI + MVC3(Razor)的新手,這可能是一個微不足道的問題,無論如何:我試圖讓自動完成工作,以便一旦從彈出我的表單被提交回其索引操作。jQueryUI自動完成與MVC3:發佈自動完成值

這裏是我的步驟(這個假樣本指的是人的一個指標):

1)我創建了一個PersonFilter包裝,如:

public sealed class PersonFilter 
{ 
    public string LastName { get; set; } 
    public int RoleId { get; set; } 
    // ... etc. 
} 

2)我創建了一個PersonList模型舉行人員列表以及一些過濾器。

3)我的索引行動像(它使用MvcContrib數據網格,何處頁和排序)提供數據的視圖:

public ViewResult Index(int? page, GridSortOptions sort, PersonFilter filter) 
{ 
    var persons = _repository.GetPersons(filter); 

    if (sort.Column != null) 
     persons = persons.OrderBy(sort.Column, sort.Direction); 
    ViewBag.Sort = sort; 

    PersonList list = new PersonList 
         { 
          persons = persons.AsPagination(page ?? 1, 10), 
          LastName = filter.LastName, 
          RoleId = filter.RoleId, 
          Roles = _repository.GetRoles(), 
          // ... 
         }; 
    ViewBag.Filter = filter; 

    return View(list); 
} 

我也有一個是FindPerson作用,這得到了姓氏參數,並且是用於在人名過濾器上自動完成。

4)我的觀點相關代碼:

... 
@model PersonList 
... 
@using (Html.BeginForm("Index", "Person", FormMethod.Post, new { id = "TheForm" })) 
{ 
... 
    <input type="text" id="LastName"/> 

    @Html.DropDownListFor(m => m.RoleId, new SelectList(Model.Roles, "Id", "Title", 0), 
                new {onchange = "document.getElementById('TheForm').submit();"}) 
... 
} 

<script type="text/javascript" language="javascript"> 
    $(function() { 
     $("#LastName").autocomplete({ 
      source: function (request, response) { 
       $.ajax({ 
        url: "/Person/FindPerson", type: "POST", dataType: "json", 
        data: { LastName: request.term }, 
        success: function (data) { 
         response($.map(data, function (item) { 
          return { label: item.LastName, value: item.LastName, id: item.Id }; 
         })); 
        } 
       }); 
      }, 
      select: function (event, ui) { 
       $("#LastName").val(ui.item.value); 
       //alert($("#LastName").val()); 
       $(this).closest("form").submit(); 
      } 
     }); 
    }); 
</script> 

現在自動完成正常工作,我可以輸入並得到一個彈出窗口,然後從中選擇一個項目;在這種情況下,我的選擇處理程序被調用,並且表單被髮布到Index操作。無論如何,這個動作並沒有得到它的過濾器姓氏成員填充(它的名字等於自動完成的輸入),同時它經常得到它的RoleId和其他成員按預期填充。

我試着明確地設置了選擇處理程序中顯示的LastName輸入值(即使這應該是多餘的),但沒有任何更改。但是,如果我取消註釋警報行,則可以查看顯示的正確值。如果我闖入Index操作,則不會設置篩選器LastName,如果我在其參數中添加FormCollection對象,則會找到名爲LastName的NO鍵。關鍵只顯示如果我添加一個隱藏字段,如:

@Html.HiddenFor(m => m.LastName) 

,但是這僅僅是找出有什麼錯我的自動完成的輸入測試。任何人都可以解釋我在這裏做錯了嗎?

回答

1

你應該給一個nameLastName文本框:

<input type="text" id="LastName" name="LastName" /> 

另外我想使用助手來產生推薦你。如果你使用助手,你不會有這樣的問題:

@Html.TextBoxFor(x => x.LastName) 

沒有名稱將不會發布到服務器。

+0

謝謝!我錯誤地認爲身份證足夠了...... – Naftis