在内联函数中编写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#中使用<% %>语法做同样的事情,它将总是抛出错误。它不喜欢在函数中显示额外的文本/html。

谁能告诉我如何用c#写上面的例子?我无法在Google

中找到会产生结果的术语

创建一个*。cshtml文件,使用Razor视图引擎。它支持您正在寻找的那种混乱语法。

如果我理解正确的话,看起来你想让你的代码和你的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 web表单的人更喜欢使用文件分隔,并使用代码隐藏文件。

如果你是从PHP开始的,并且习惯了这种编码风格,那么你可能会发现这和Razor的混合适合你的喜好。

解决方案:感谢@joel-coehoorn和如何在cshtml模板中创建一个函数?

<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>

最新更新