通过用户控件的ASP.NET MVC数据反馈

时间:2008-11-06 03:50:22

标签: c# asp.net-mvc

在我们的新产品中,我们有一些数据输入字段,要求您搜索要放在此字段中的正确值。

当您输入此数据输入字段时,我想通过视图上的某些内容(可能是Ajax实现)提供搜索选项,并允许它在数据库中搜索值,但是当结果返回时我想保留不受搜索影响的其他字段的现有值。

但我不知道如何用MVC做到这一点。有没有人对如何做到这一点有任何建议?

1 个答案:

答案 0 :(得分:2)

将数据输入页面写入     ASP.NET MVC视图的常用方法。     没有Ajax就可以使用它     (例如,提交时正常工作     你只需键入值即可     自动完成)。

为用户执行特定操作时调用的JavaScript方法编写原型(例如,按某个控件内的键)。但这是在aspx页面的脚本标记内。不幸的是,堆栈溢出似乎在我的示例中“清理”脚本标记,所以我无法证明该部分。但是你的JavaScript原型看起来像这样:

function startAutoComplete() {
}

现在在用户界面控件上挂钩事件处理程序。您需要调用函数,为您的应用程序创建适当的事件处理程序原型。根据您的说明,您可能希望使用onkeydown,但有lots of events to choose from。您可能需要根据应用程序处理多个事件。

到目前为止,我们所做的一切都是标准的aspx和JavaScript。在这一步中,我们将完成整个过程的唯一部分,这对ASP.NET MVC来说是非常不同的。您需要向控制器添加一个动作,该动作将由您刚刚编写的JavaScript原型(间接)调用。该操作应该接受适当的输入(例如,表示来自控件的文本的字符串,或类似的,适合您的应用程序)并以JSON格式返回其结果。我将在这里展示一个非常简单的例子;随意在实际应用程序中替换更复杂的代码。

public ActionResult GetSuggestions(string searchText)
{
    return Json(new {SearchText = searchText});
}

此示例仅返回包含一个属性的JavaScript对象,该属性包含传递给函数的值。就像你说的,你可以写一些对你的应用更有用的东西。

现在你需要在JavaScript中调用这个函数。 URI将类似于:

http://localhost/mycontroller/GetSuggestions?searchText=Foo

可以在没有JavaScript库的情况下进行Ajax调用,但如果使用jQuery或其他一些处理跨浏览器兼容性问题的库,则会更容易。因为我碰巧喜欢jQuery,所以我会证明这一点。让我们更新之前原型的startAutoComplete方法:

function startAutoComplete() {
    var searchText = $("#myeditorid").text();
    $.getJSON("/mycontroller/GetSuggestions?searchText=" + searchText,
        null,
        autoCompleteResponse);
}

第一行使用jQuery通过ID myeditorid获取控件中的文本。我们将它作为searchText参数传递给ASP.NET MVC操作,方法是将其作为查询字符串参数附加。

以$ .getJSON开头的下一行调用一个jQuery函数,该函数对您指定的URI进行Ajax调用。我们传递一个参数autoCompleteResponse,这是一个JavaScript方法的名称,如果Ajax调用的响应成功则调用它。现在我们必须编写autoCompleteResponse。

function autoCompleteResponse(data) {
    if (data.SearchText)
    {
        $("#myeditorid").text(data.SearchText);
    }
}

这说:“如果返回的数据具有SearchText属性,请将控件的文本设置为该值。”再次,使用返回的数据做适合您的应用程序的任何内容。