Asp.net mvc 通过ASP.NET MVC服务器代码填充的淘汰下拉列表

Asp.net mvc 通过ASP.NET MVC服务器代码填充的淘汰下拉列表,asp.net-mvc,knockout.js,Asp.net Mvc,Knockout.js,所以我是新手,我在网上搜索,找不到一个直截了当的答案。情况是这样的。我在asp.net mvc部分视图中有一个下拉列表。它通过具有值和@Html帮助程序的viewmodel填充,特别是dropdownlistfor。我在web上看到的示例似乎需要一个依赖的可观察数组,但下拉列表的所有值都是在javascript(硬编码)/中设置的,而不是通过服务器端代码设置的。我只想在所选值更改时(即:对于实时预览类型功能),让span观察下拉列表的输出。任何帮助都将不胜感激,因为我确信我错过了一些简单的东西。

所以我是新手,我在网上搜索,找不到一个直截了当的答案。情况是这样的。我在asp.net mvc部分视图中有一个下拉列表。它通过具有值和@Html帮助程序的viewmodel填充,特别是dropdownlistfor。我在web上看到的示例似乎需要一个依赖的可观察数组,但下拉列表的所有值都是在javascript(硬编码)/中设置的,而不是通过服务器端代码设置的。我只想在所选值更改时(即:对于实时预览类型功能),让span观察下拉列表的输出。任何帮助都将不胜感激,因为我确信我错过了一些简单的东西。谢谢

像这样的

<select data-bind="event: {change: mySelectChange},value:myValue">
    <option value="1">One</option>
    <option value="2">Two</option>
    <option value="3">Three</option>
</select>
<span data-bind="text:myText"></span>


<script>...

function ViewModel()
{
    var self = this;
    this.myValue = ko.observable();
    this.myText = ko.observable();

    this.mySelectChange = function (obj, evt) {
        var item = $(evt.currentTarget);
        self.myText(item.find('option:selected').text());
    };
}

...
</script>

一个
两个
三
...
函数ViewModel()
{
var self=这个;
this.myValue=ko.observable();
this.myText=ko.observable();
this.mySelectChange=函数(obj,evt){
变量项=$(evt.currentTarget);
self.myText(item.find('option:selected').text());
};
}
...

那么您的实际问题是什么?您在实现span标记的更新时是否遇到问题?请包括您已经尝试过的代码,并指出问题所在。问题是如何实现这一目标。我还没有任何代码,因为我一直在搜索SO和web以了解如何实现这一点。基本上,场景是如果下拉列表通过服务器端代码填充其值,那么如何创建本例中所示的可观察数组,以便使用所选值更新范围?一个简单的例子是等级字段。如果我的成绩是7-12,用户点击了8,我希望span的文本更新为8。我不需要在JS中提供我的下拉列表值。我想我可能已经找到了我想要的东西,但我不能说我喜欢它。也许更好的做法是使用JSON操作方法获取下拉列表的值,然后遵循上面提到的淘汰教程?ASP.NET MVC开发人员使用的最佳实践是什么?我本以为这是一个常见的KO场景。很抱歉,我误解了您最初的问题。您正在查找所选文本吗?我使用jQuery来获取文本。我将用一个例子来编辑我的答案我只是好奇我认为这会起作用,但这不是有点违背MVVM租户淘汰赛试图建立的目标吗?可能:)但它对我很有效。如果从JSON开始,您肯定会更容易坚持MVVM。从长远来看,这真的更好吗?使用自定义绑定处理程序可能有更好的方法,但我发现在像这样的少数场景中,使用jquery黑客并继续前进是很容易/快速的。我不知道我是否同意这一点。Razor处理服务器端数据,knockout处理客户端数据。从服务器获得数据后,可能需要进行交互。没有理由说这两者不能携手合作,因为它们处理的是不同的问题。现在,对于手头的问题,可能有一种更适合MVVC的方法来处理它。看来我有一些家庭作业要做。祝你的项目好运。干杯