2011-05-24 32 views
0

在JavaScript中使用这种构造有什么限制。在我的代码后面我有财产,并得到它有相当复杂的逻辑。它调用其他方法等等,尽管在调试时它显示返回良好的值,但我得到的结果是空字符串。我想知道我能做什么,因为这种类型的代码在渲染方法中运行。JavaScript <%= MyProperty%>

回答

2

使用该方法呈现JavaScript没有任何限制。你只需要确保你的属性可以在各种场景下使用,比如标准的HTTP获取,回传等等。当然,你必须确保该属性被正确地转义/按照需要进行了JavaScript编码,即如果它中包含引号的字符串值等

+0

+1。做这件事时总会有一件事 - 当值是一个字符串时,忘记将我的<%= %>块用引号括起来。看起来像我这样做至少有一次。 – Matt 2011-05-24 18:02:01

0

我用这一切的时候...

我也建议做如下:

this.txtProjectName = $('#<%=this.txtProjectName.ClientID %>'); 

...这样txtProjectName是一个jQuery对象从一开始。

下面是一个广泛的例子:
请注意一些在下面的类中调用的是这里没有显示的对象。

<script type="text/javascript"> 

    var projectDialog = (function($) { 
     var publicInstances = {}; 

     // *********************** 
     // form 
     publicInstances.form = form; 
     function form(controller) { 

      /// <summary></summary> 
      var self = this; 

      /// <summary></summary> 
      this.controller = controller; 
      /// <summary></summary> 
      this.validationController = null; 

      this.hidAsOf = $('#<%=this.hidAsOf.ClientID %>'); 
      this.hidProjectKey = $('#<%=this.hidProjectKey.ClientID %>'); 
      this.hidMode = $('#<%=this.hidMode.ClientID %>'); 
      this.ddlClients = $('#<%=this.ddlClients.ClientID %>'); 

      this.txtProjectName = $('#<%=this.txtProjectName.ClientID %>'); 
      this.txtProjectNumber = $('#<%=this.txtProjectNumber.ClientID %>'); 
      this.txtProjectManager = $('#<%=this.txtProjectManager.ClientID %>'); 
      this.txtProjectDescription = $('#<%=this.txtProjectDescription.ClientID %>'); 
      this.ddlEMREProductivityCurve = $('#<%=this.ddlEMREProductivityCurve.ClientID %>'); 
      this.txtStartDate = $('#<%=this.txtStartDate.ClientID %>'); 
      this.txtEndDate = $('#<%=this.txtEndDate.ClientID %>'); 
      this.txtEngineeringHours = $('#<%=this.txtEngineeringHours.ClientID %>'); 
      this.txtDirectHours = $('#<%=this.txtDirectHours.ClientID %>'); 
      this.txtIndirectHours = $('#<%=this.txtIndirectHours.ClientID %>'); 
      this.txtOtherHours = $('#<%=this.txtOtherHours.ClientID %>'); 
      this.txtARRThreshold = $('#<%=this.txtARRThreshold.ClientID %>'); 
      this.txtAppropriationHours = $('#<%=this.txtAppropriationHours.ClientID %>'); 
      this.txtAppropriationDollars = $('#<%=this.txtAppropriationDollars.ClientID %>'); 
      this.ibtnSaveProject = $('#<%=this.ibtnSaveProject.ClientID %>'); 
      this.imgClose = $('#<%=imgClose.ClientID %>'); 
      this.imgStartDate = $('#<%=imgStartDate.ClientID %>'); 
      this.imgEndDate = $('#<%=imgEndDate.ClientID %>'); 

      this.disabledCssClass = "textbox-locked"; 

      /// <summary></summary> 
      this.initialize = function() { 

       var context = $(self.controller.container); 
       var contentArea = $(self.controller.contentArea, context); 

       self.validationController = new validation.controller(contentArea); 

       if(self.controller.readOnly == true) 
        self.disableForm(); 

       /// <summary>Set defaults.</summary> 
       self.ddlClients.attr('disabled', 'disabled'); 

       /// <summary>Register click events.</summary> 
       self.ibtnSaveProject.click(function() { self.controller.save(); }); 
       self.imgClose.click(function() { self.close(); }); 

       /// <summary>Register rounders.</summary> 
       $('input.rounder-decimal', context).numericRounder(); 

       /// <summary>Register keypress events.</summary> 
       $('input.rounder-decimal', context).keypress(function(e) { 
        return enforceValueAsDollar(e, this.val); 
       }); 

       /// <summary>Register change events.</summary> 
       $('input.rounder-decimal', context).change(function() { 
        var element = $(this); 
        var value = element.extractValue(); 
        var formatted = $.formatNumber(value.toString(), { format: "#,###.00", locale: "us" }); 

        if (isNaN(value)) 
         formatted = 0; 

        element.val(formatted); 

        if (!element.is('.textbox-total')) 
         self.calculateAppropriationHours(); 
       }); 
      }; 
      /// <summary></summary> 
      this.disableStartDate = function(){ 
       self.imgStartDate.remove(); 
       self.txtStartDate.removeClass(self.disabledCssClass); 
       self.txtStartDate.addClass('TextBoxLocked'); 
      }; 
      /// <summary></summary> 
      this.disableForm = function() { 

       self.disableStartDate(); 

       self.ddlEMREProductivityCurve.attr('disabled', true); 

       self.txtProjectName.attr('disabled', true); 
       self.txtProjectNumber.attr('disabled', true); 
       self.txtProjectManager.attr('disabled', true); 
       self.txtProjectDescription.attr('disabled', true); 

       self.txtEndDate.attr('disabled', true); 
       self.txtEngineeringHours.attr('disabled', true); 
       self.txtDirectHours.attr('disabled', true); 
       self.txtIndirectHours.attr('disabled', true); 
       self.txtOtherHours.attr('disabled', true); 
       self.txtARRThreshold.attr('disabled', true); 
       self.txtAppropriationHours.attr('disabled', true); 
       self.txtAppropriationDollars.attr('disabled', true); 

       self.txtProjectName.addClass(self.disabledCssClass); 
       self.txtProjectNumber.addClass(self.disabledCssClass); 
       self.txtProjectManager.addClass(self.disabledCssClass); 
       self.txtProjectDescription.addClass(self.disabledCssClass); 

       self.txtEndDate.addClass(self.disabledCssClass); 
       self.txtEngineeringHours.addClass(self.disabledCssClass); 
       self.txtDirectHours.addClass(self.disabledCssClass); 
       self.txtIndirectHours.addClass(self.disabledCssClass); 
       self.txtOtherHours.addClass(self.disabledCssClass); 
       self.txtARRThreshold.addClass(self.disabledCssClass); 
       self.txtAppropriationHours.addClass(self.disabledCssClass); 
       self.txtAppropriationDollars.addClass(self.disabledCssClass); 

       self.ibtnSaveProject.css('display', 'none'); 
      }; 
      /// <summary></summary> 
      this.close = function() { 
       self.clear(); 
       closeSubForm('<%=divProjectDialog.ClientID %>'); 
      }; 
      /// <summary></summary> 
      this.clear = function() { 

       self.validationController.clear(); 

       self.hidProjectKey.val('0'); 

       self.txtProjectName.val(''); 
       self.txtProjectNumber.val(''); 
       self.txtProjectManager.val(''); 
       self.txtProjectDescription.val(''); 

       self.txtStartDate.val(''); 
       self.txtEndDate.val(''); 
       self.txtEngineeringHours.val('0.00'); 
       self.txtDirectHours.val('0.00'); 
       self.txtIndirectHours.val('0.00'); 
       self.txtOtherHours.val('0.00'); 
       self.txtARRThreshold.val('0.00'); 
       self.txtAppropriationHours.val('0.00'); 
       self.txtAppropriationDollars.val('0.00'); 
      }; 
      /// <summary></summary> 
      this.isOpen = function() { 
       var context = $(self.controller.container) 
       return (context.css('opacity') == '0') ? false : true; 
      }; 
      /// <summary></summary> 
      this.isValid = function() { 

       self.validationController.clear(); 

       var key = parseInt(self.hidProjectKey.val()); 

       if (self.ddlClients.val().length == 0) { 
        var validator = self.validationController.getValidator(self.ddlClients.id()); 
        validator.appendMessage("Please choose an option."); 
       } 

       if (self.txtProjectName.val().length == 0) { 
        var validator = self.validationController.getValidator(self.txtProjectName.id()); 
        validator.appendMessage("Cannot be empty."); 
       } 

       if (self.hidProjectKey.val().length > 0) { 

        var key = parseInt(self.hidProjectKey.extractValue()); 
        if (key > 0) 
        { 
         if (self.ddlEMREProductivityCurve.val().toLowerCase() == 'none') { 
          var validator = self.validationController.getValidator(self.ddlEMREProductivityCurve.id()); 
          validator.appendMessage("Please choose an option."); 
         } 

         if (self.txtStartDate.val().length == 0) { 
          var validator = self.validationController.getValidator(self.txtStartDate.id()); 
          validator.appendMessage("Click calendar to choose a valid date."); 
         } 

         if (self.txtEndDate.val().length == 0) { 
          var validator = self.validationController.getValidator(self.txtEndDate.id()); 
          validator.appendMessage("Click calendar to choose a valid date."); 
         } 

         if ((self.txtStartDate.val().length > 0) && (self.txtEndDate.val().length > 0)) { 
          var startDate = new Date(self.txtStartDate.val()); 
          var endDate = new Date(self.txtEndDate.val()); 

          if (startDate > endDate) { 
           var validator = self.validationController.getValidator(self.txtEndDate.id()); 
           validator.appendMessage("End date must br greater than start date."); 
          } 
         } 
        } 
       } 

       if (self.txtARRThreshold.val().length == 0) { 
        var validator = self.validationController.getValidator(self.txtARRThreshold.id()); 
        validator.appendMessage("Cannot be empty."); 
       } 
       else if (isNaN(self.txtARRThreshold.extractValue())) { 
        var validator = self.validationController.getValidator(self.txtARRThreshold.id()); 
        validator.appendMessage("Is not a valid number."); 
       } 

       if (self.txtEngineeringHours.val().length == 0) { 
        var validator = self.validationController.getValidator(self.txtEngineeringHours.id()); 
        validator.appendMessage("Cannot be empty."); 
       } 
       else if (isNaN(self.txtEngineeringHours.extractValue())) { 
        var validator = self.validationController.getValidator(self.txtEngineeringHours.id()); 
        validator.appendMessage("Is not a valid number."); 
       } 

       if (self.txtDirectHours.val().length == 0) { 
        var validator = self.validationController.getValidator(self.txtDirectHours.id()); 
        validator.appendMessage("Cannot be empty."); 
       } 
       else if (isNaN(self.txtDirectHours.extractValue())) { 
        var validator = self.validationController.getValidator(self.txtDirectHours.id()); 
        validator.appendMessage("Is not a valid number."); 
       } 

       if (self.txtIndirectHours.val().length == 0) { 
        var validator = self.validationController.getValidator(self.txtIndirectHours.id()); 
        validator.appendMessage("Cannot be empty."); 
       } 
       else if (isNaN(self.txtIndirectHours.extractValue())) { 
        var validator = self.validationController.getValidator(self.txtIndirectHours.id()); 
        validator.appendMessage("Is not a valid number."); 
       } 

       if (self.txtOtherHours.val().length == 0) { 
        var validator = self.validationController.getValidator(self.txtOtherHours.id()); 
        validator.appendMessage("Cannot be empty."); 
       } 
       else if (isNaN(self.txtOtherHours.extractValue())) { 
        var validator = self.validationController.getValidator(self.txtOtherHours.id()); 
        validator.appendMessage("Is not a valid number."); 
       } 

       if (self.txtAppropriationHours.val().length == 0) { 
        var validator = self.validationController.getValidator(self.txtAppropriationHours.id()); 
        validator.appendMessage("Cannot be empty."); 
       } 
       else if (isNaN(self.txtAppropriationHours.extractValue())) { 
        var validator = self.validationController.getValidator(self.txtAppropriationHours.id()); 
        validator.appendMessage("Is not a valid number."); 
       } 

       if (self.txtAppropriationDollars.val().length == 0) { 
        var validator = self.validationController.getValidator(self.txtAppropriationDollars.id()); 
        validator.appendMessage("Cannot be empty."); 
       } 
       else if (isNaN(self.txtAppropriationDollars.extractValue())) { 
        var validator = self.validationController.getValidator(self.txtAppropriationDollars.id()); 
        validator.appendMessage("Is not a valid number."); 
       } 

       self.validationController.displayAll(); 

       return (self.validationController.hasErrors() == true) ? false : true; 
      }; 
      /// <summary></summary> 
      this.calculateAppropriationHours = function() { 

       var engineeringHours = (+self.txtEngineeringHours.extractValue()) || 0; 
       var directHours = (+self.txtDirectHours.extractValue()) || 0; 
       var indirectHours = (+self.txtIndirectHours.extractValue()) || 0; 
       var otherHours = (+self.txtOtherHours.extractValue()) || 0; 

       var total = engineeringHours + directHours + indirectHours + otherHours; 

       self.txtAppropriationHours.val(total).change(); 
      }; 
      /// <summary></summary> 
      this.populateFrom = function(project) { 

       self.clear(); 

       self.hidProjectKey.val(project.key); 

       // Drop-Down 
       self.ddlClients.val(project.clientKey); 

       self.txtProjectName.val(project.projectName); 
       self.txtProjectNumber.val(project.number); 
       self.txtProjectManager.val(project.projectManager); 
       self.txtProjectDescription.val(project.description); 

       // Drop-Down 
       self.ddlEMREProductivityCurve.val(project.productivityCurveType); 

       if(project.startDate != null) 
        self.txtStartDate.val(project.startDate); 

       if(project.startDate != null) 
        self.txtEndDate.val(project.endDate); 

       self.txtEngineeringHours.val(project.engineeringHours); 
       self.txtDirectHours.val(project.directHours); 
       self.txtIndirectHours.val(project.indirectHours); 
       self.txtOtherHours.val(project.otherHours); 
       self.txtARRThreshold.val(project.arrThreshold); 
       self.txtAppropriationHours.val(project.appropriationHours); 
       self.txtAppropriationDollars.val(project.appropriationAmount); 

       self.txtEngineeringHours.change(); 
       self.txtDirectHours.change(); 
       self.txtIndirectHours.change(); 
       self.txtOtherHours.change(); 
       self.txtARRThreshold.change(); 
       self.txtAppropriationHours.change(); 
       self.txtAppropriationDollars.change(); 
      }; 
     }; 

     return publicInstances; 
    })(jQuery); 
</script> 
+0

这种服务器和js的硬耦合让我非常伤心:( – Raynos 2011-05-24 18:12:59

+0

即使在C#中,“有些”东西本质上也是非常耦合的。 – 2011-05-24 19:26:20

+0

@prisonerZERO这更像是ASP.NET的通用失败和无法创建合理或语义HTML与他们的控制。我不同意在.NET中,“一些”的事物本质上是非常耦合的。它与C# – Raynos 2011-05-24 19:27:06

相关问题