2016-02-04 87 views
-2

如何更新我的文本框來顯示一個下拉列表如何根據從mvc4下拉列表中選擇項目來顯示文本框中的值?

查看

@Html.LabelFor(model => model.CustomerName , new { @class = "control-label" }) 
@Html.DropDownListFor(model => model.CustomerContactID, new SelectList(string.Empty, "Value", "Text"), "Please select a ContactPerson", new { @style = "width:250px;" }) 

@Html.LabelFor(model => model.Email1, new { @class = "control-label" }) 
@Html.TextBoxFor(model => model.ContactID, new { @class = "form-control", type = "text" }) 
@Html.ValidationMessageFor(model => model.Email1) 

@Html.LabelFor(model => model.MobileNo1, new { @class = "control-label" }) 
@Html.TextBoxFor(model => model.ContactID, new { @class = "form-control", type = "text" }) 
@Html.ValidationMessageFor(model => model.MobileNo1) 

腳本

$('#CustomerContactID').change(function() { 
    $('#ContactID').empty(); 
    $.ajax({ 
     type: "GET", 
     url: "/VisitorsForm/GetEmailByCustomerContactId", 
     datatype: "Json", 
     data: { CustomerContactID: $('#CustomerContactID').val() }, 
     success: function (data) { 
      $('#Email1').val(data.Email1); 
      $('#MobileNo1').val(data.Mobile1); 
     } 
    }); 
}); 

控制器

基於選定值我 Contact模型 Email1Mobile1性質
public JsonResult GetEmailByCustomerContactId(string CustomerContactId) 
{ 
    Guid Id = Guid.Parse(CustomerContactId); 
    var contacts = from a in db.Contacts where a.ContactID == Id select a; 
    return Json(contacts); 
} 
+0

什麼是不工作?你得到什麼錯誤? 'var contacts = from a in db.Contacts where a.ContactID == Id select a;返回Json(contacts);'返回一個集合,並且集合沒有名爲'Email1'或'Mobile1'的屬性。建議您刪除90%與您的問題無關的代碼,並專注於該問題,然後您將得到答案。 –

+0

其實電郵和MobileNo聯繫表 – Vani

+0

我沒有得到任何錯誤 – Vani

回答

1

您在GetEmailByCustomerContactId()回報IEnumerable<Contact>,一個集合,而不是一個單一的對象查詢,所以data在阿賈克斯成功回調是一個數組,因爲數組沒有名爲Email1屬性(但集合中的每個項目做$('#Email1').val(data.Email1);失敗)

既然你只想要回一個Contact更改查詢到

var contact = (from a in db.Contacts where a.ContactID == Id select a).FirstOrDefault(); 

因爲你只想要Contact 2個屬性,然後返回僅包含那些屬性的匿名對象(有沒有點降解性能由sendi通過線路NG數據,你永遠不使用

var data = new { Email1 = contact.Email1, Mobile1 = contact.Mobile1 }; 

最後指定JsonRequestBehavior選擇,因爲你的一個GET調用

return Json(data, JsonRequestBehavior.AllowGet;); 

接下來,你不id="Email1"id="Mobile1"產生任何輸入。這兩個文本框,你必須創建綁定到ContactID,所以我想這應該是

@Html.TextBoxFor(model => model.Email1, new { @class = "form-control" }) 
@Html.TextBoxFor(model => model.Mobile1, new { @class = "form-control" }) 

假設Email1Mobile1也都在視圖模型的屬性。

你的文本框現在將在success回調更新

旁註:

  1. 始終使用url: '@Url.Action(....)',,以確保正確的URL生成
  2. 使用data: { CustomerContactID: $(this).val() },
  3. 更改方法參數到public JsonResult GetEmailByCustomerContactId(Guid CustomerContactId)並刪除 Guid.ParseDefaultModelBinder將會升來做轉換)
  4. 從您的Html.TextBoxFor()方法 new { type = "text" }(助手已經補充說)
相關問題