2012-10-19 164 views
-1

我使用c#MVC3 &剃须刀,实体框架和Linq。表单中的自动填充字段? []

我有一个表格,有两个字段,第一个客户端ID和第二个店名。 我想,当用户输入ID,然后我的StoreName字段自动填充...数据将来自存储这两个数据的数据库。

+0

它会自动完成哪些数据?基于什么信息?所以你有一个由用户键入的名字。姓氏从哪里来?数据库?如果有多个与给定名字关联的姓氏会怎样?另外,不要忘记在你的问题中提及[你已经尝试过](http://mattgemmell.com/2008/12/08/what-have-you-tried/),以及你遇到的具体困难你试过的代码。 –

+0

我已经更新了我的问题,我希望它会更清楚一点......我想尝试一些东西,但我真的不知道如何去做,在互联网上开始或寻找什么。 .. – Alternative

回答

1

您可以使用AJAX。因此,请设置一个控制器操作,以客户端ID作为参数,然后查询您的数据库并将相应的商店名称作为JSON结果返回。然后订阅包含商店标识的文本输入的.blur事件,并向控制器操作发送AJAX调用以填充第二个输入字段。

是的,我知道,毫无意义的jibber-jabber,给我的代码。

这里:

public ActionResult GetStoreName(int clientId) 
{ 
    // of course thath's just an example here. I have strictly no idea 
    // what database access technology you are using, how your models look like 
    // and so on. Obviously you will have to adapt this query to your data model. 
    var client = db.Clients.FirstOrDefault(x => x.Id == clientId); 
    if (client == null) 
    { 
     return HttpNotFound(); 
    } 

    return Json(new { storeName = client.Store.Name }, JsonRequestBehavior.AllowGet); 
} 

现在假设有如下观点:

<div> 
    @Html.LabelFor(x => x.ClientId) 
    @Html.TextBoxFor(x => x.ClientId, new { id = "clientId", data-url = Url.Action("GetStoreName") }) 
</div> 
<div> 
    @Html.LabelFor(x => x.Store.Name) 
    @Html.TextBoxFor(x => x.Store.Name, new { id = "storeName" }) 
</div> 

在一个单独的JavaScript文件,你可以订阅.blur事件的第一个文本框,并触发AJAX请求控制器向其发送由用户输入的客户端ID。在成功回调中,您将更新第二个带有AJAX调用结果的文本框:

$(function() { 
    $('#clientId').blur(function() { 
     var clientId = $(this).val(); 
     $.ajax({ 
      url: $(this).data('url'), 
      type: 'GET', 
      cache: false, 
      data: { clientId: clientId }, 
      success: function(result) { 
       $('#storeName').val(result.storeName); 
      } 
     }); 
    }); 
}); 
+0

非常感谢,你给了我超过我的预期。我会处理它 – Alternative

+0

我有这个线'新的{id =“clientId”,data-url = Url.Action(“GetStoreName”)}'上的“url-data”的问题。它说它并不存在于实际的环境中。它是什么,这个属性是什么? – Alternative