表单中的自动填充字段? []

时间:2012-10-19 11:49:36

标签: c# asp.net-mvc-3 linq forms

我使用c#MVC3&剃刀,实体框架和Linq。

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

1 个答案:

答案 0 :(得分:1)

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

是的,我知道,没有意义的jibber-jabber,gimme the codez。

下面:

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);
            }
        });
    });
});