2008-11-06 40 views
0

在我们的新产品中,我们有一些数据输入字段,要求您搜索正确的值以放置在此字段中。通过用户控制ASP.NET MVC数据反馈

当你进入这个数据输入字段时,我想通过视图上的某个东西(可能是一个Ajax实现)提供一个搜索选项,并允许搜索数据库的值,但是当结果返回时,我想为其他不受搜索影响的字段保留现有值。

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

回答

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 

它有可能使Ajax调用没有一个JavaScript库,但如果你使用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,它是在Ajax调用的响应成功时调用的JavaScript方法的名称。现在我们必须编写autoCompleteResponse。

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

这上面说,“如果返回的数据具有SEARCHTEXT属性,设置控制该值的文本。”再次,用返回的数据为您的应用程序做适合的操作。

+0

这正是我需要的,谢谢! – Odd 2008-11-06 22:43:28