2016-02-04 86 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" }(助手已经补充说)
相关问题