在内联函数中编写WebForms语法

时间:2013-06-11 19:36:07

标签: c# asp.net webforms

在PHP中,我可以定义和使用这样的函数:

<html>
    <head></head>
    <body>
      <?php
      function processItem($item)
      {
           $item = $item * 10;
           ?>
           The item is <strong><?= $item ?></strong><br />
           <?php
      }
      ?>

      <?php
           $items = array(1,2,3,4);
           for($i = 0; $i < $items.length; $i++)
           {
               processItem($items[$i]);
           }
      ?>
    </body>
</html>

如果我尝试在C#中使用<% %>语法执行相同的操作,它将始终抛出错误。它不喜欢在函数中显示额外的text / html。

有人可以告诉我如何在C#中编写上述示例吗?我无法找到会在Google中产生结果的条款

3 个答案:

答案 0 :(得分:0)

创建* .cshtml文件,并使用Razor View Engine。它支持您正在寻找的那种混乱的语法。

答案 1 :(得分:0)

如果我理解正确,您似乎希望将代码放在与html相同的页面上。这在asp.net中非常简单,有时也称为“单个文件”代码。这是一个例子:http://www.codeproject.com/Articles/8178/Inline-Single-File-vs-CodeBehind

主要区别在于你应该把它放在Head标签之间:

<%@ Page Language="C#" debug="true" trace="false"%>
<html>
  <head>
    <title></title>
    <script runat="server">
      // ASP.NET page code goes here
      void Page_Load() {
        //On Page Load Run this Code
      }
    </script>
  </head>
  <body>    
     <form runat="server">
      <!-- ASP.NET controls go here -->
    </form> 
  </body>
</html>

这种情况在很久以前并不罕见,但大多数使用asp.net网络表单的人更喜欢使用文件分离并使用代码隐藏文件。

如果您来自PHP并且已经习惯了这种编码风格,那么您可能会发现这个和Razor混合在一起。

答案 2 :(得分:0)

解决方案:感谢@ joel-coehoorn和How to create a function in a cshtml template?

<html>
    <head></head>
    <body>
      @helper processItem(int item)
      {
           item = item * 10;
           <text>
           The item is <strong>@item</strong><br />
           </text>
           var anotherCalculation = item + 2;
           <strong>some more text</strong>
      }

      @{
           var items = myIntArray;
           for(var i = 0; i < items.Count; i++)
           {
               processItem(items[i]);
           }
      }
    </body>
</html>