2016-08-18 26 views
0

我有一个与淘汰赛2.3.0的asp.net页面。该页面包含一个依赖下拉列表。在example.js中,它首先列出这2个下拉列表。依赖列表正在工作。ASP.NET Knockout相关下拉列表无法获得选定的值时回发

但是,当我在前端选择了值时,当在服务器端单击按钮时,我无法获得选定值。所选值始终设置为默认值。

请帮忙!

<%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" EnableEventValidation="false" Inherits="WebApplication1.WebForm1" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server"> 
    <script src="JS/knockout-2.3.0.js"></script> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <asp:ScriptManager ID="sm1" runat="server"></asp:ScriptManager> 

    <asp:DropDownList runat="server" ID="ddl1" data-bind="options: jobAreas, optionsCaption:'--Job Areas--', optionsText: 'jobAreaName', optionsValue: 'jobAreaID', value: selectedJobArea"> 
    </asp:DropDownList> 
    <asp:DropDownList runat="server" ID="ddl2" data-bind="options: jobFunctions, optionsCaption:'--Job Function--', optionsText: 'jobFunctionName', optionsValue: 'jobFunctionID', value: selectedJobFunction, enable: jobFunctions().length"> 
    </asp:DropDownList> 

    <asp:LinkButton ID="Button1" runat="server" Text="Next" OnClick="Test" /> 
</asp:Content> 
<asp:Content ID="Content3" ContentPlaceHolderID="ScriptTags" runat="server"> 
    <script src="JS/example.js"></script> 
</asp:Content> 

在example.js

function ViewModel(items) { 
    this.jobAreas = ko.observableArray(items); 
    this.selectedJobArea = ko.observable(); 
    this.selectedJobFunction = ko.observable(); 

    function getById(items, value) { 
     if(!value) { 
      return []; 
     } 

     var result = ko.utils.arrayFirst(items, function(item) { 
      return item.jobAreaID === value; 
     }); 

     return result && result.JubfunctionItems || []; 
    } 

    this.jobFunctions = ko.computed(function(){ 
     var items = this.jobAreas(); 
     var id = this.selectedJobArea(); 
     return getById(items, id); 
    }, this); 

} 

var items = [ 
    { jobAreaName: 'Ford', jobAreaID: 1, JubfunctionItems: 
    [ 
     { jobFunctionName: 'F-150', jobFunctionID: 1}, 
     { jobFunctionName: 'F-250', jobFunctionID: 2} 
    ] 
    }, 
    { jobAreaName: 'Honda', jobAreaID: 2, JubfunctionItems: 
    [ 
     { jobFunctionName: 'Civic', jobFunctionID: 5}, 
     { jobFunctionName: 'Accord', jobFunctionID: 6} 
    ] 
    } 
]; 

var module = {}; 

module.viewModel = new ViewModel(items); 

ko.applyBindings(module.viewModel); 

回答

1

的下拉列表被宣布为你的aspx页面空的,将被记录在ViewState这样。

通过JavaScript将不被认可。然而作为有效的项目并不会记录在.SelectedValue

你可以,通过直接访问Request.Form访问选定值产生的任何下拉列表项。例如:

Request.Form[ddl2.UniqueID]

Request.Form[ddl1.UniqueID]

+0

感谢新。有可能获得文本,而不是编号? – WPENG

+0

对于文本,我怕你得弄脏手......创建一个''并使用javascript来更新它的值,并使用所选的下拉文本。然后您可以从您的代码后面访问HiddenField值 – Lowkey

+0

再次感谢您。我发现如果我使用我可以在js中设置值并获取所选项目的ID和值。另外我可以在回帖中访问这些值。只是想知道为什么只有下拉列表项不被视为有效项目... – WPENG

相关问题