0

我一直在与一个团队合作开发一个 ASP.NET 项目,这是一个项目管理工具。大多数页面基本上是将数据库中的内容写入页面并存储所做的更改。

这是我们在 ASP.NET 中的第一个项目(我们目前所有其他项目都使用 ASP Classic),我们的前辈告诉我们不要使用 MVC。

现在的问题是我们的设计师/前端开发人员对于 ASP.NET 几乎一无所知,如果可能的话,他也不想使用 VisualStudio(他使用 OSX)。

例如:例如,编写动态列表的最佳方式是什么?

这是我们目前所做的:

<div id="tasks" overflow-y="scroll" style="height:400px;">
   <ul id='taskList'>
     <% PrintTasks(); %>
   </ul>
</div>

在代码隐藏中:

public void PrintTasks()
{
        foreach (var task in _tasks)
        {
            Response.Write("<li rel='#' id='task_"+task.TaskID+"'>" +
                   ...
                "</span>" +
                "</li>");
        } 
}

在这种情况下,设计者不可能在不进入后面的代码的情况下编辑 li 标签。

谢谢。

4

6 回答 6

2

恐怕您的前端开发人员将不得不接受它并学习如何使用 VS。如果您的整个团队都在 ASP.Net 上工作,那么就无法逃脱 VS 的愤怒。

MVC 有利于 C# 和 HTML 的分离。Razor 引擎提供了一种分离代码和标记的好方法。

对于您的列表,您可能会在 Razor 中执行类似的操作:

@foreach (var item in items)
{
    <li rel="#" id ="blah_@item.id">@item.text</li>
}
于 2012-09-07T09:43:44.600 回答
2

您绝对应该提出为什么不能选择 MVC 的问题。这将更适合您正在做的事情,因此代码质量也会更好,这有助于整个项目。更不用说团队生产力(以及您的设计师“逃避” VS 的能力)。

使用 Razor 做一些 CSHTML,您和您的团队几乎会感到“宾至如归”。

于 2012-09-07T09:45:03.447 回答
1

在使用 ASP.NET WebForms 时,我会给你以下建议:

  1. 充分利用 CSS。接受您的设计师将无法编辑由您的代码隐藏生成的 HTML,但如果您聪明地使用 CSS,您可能会克服这一挑战。在您的示例中,您有一个div和一个ul带有 id 的元素,然后设计人员可以使用 CSS 的级联属性更改 CSS 以设置这些元素和子元素的样式。(例如#taskList > li:)
  2. 在适当的时候考虑客户端模板。为用户呈现数据时,fx. 列表,考虑使用模板框架。(jQuery fx) 这些模板可以放在单独的文件中,您的设计人员可以在没有 VS 的情况下对其进行编辑。(参考:从外部文件加载 jQuery-Templates?
  3. 花一些时间学习 ASP.NET WebForms 中可用的不同控件,而不是Response.Write用来构建 HTML。在代码隐藏中使用Response.Write通常是一种非常糟糕的做法,应该避免,因为您的代码会很快变成意大利面条并且无法维护。如果您希望在以后的项目中使用 ASP.NET WebForms(或 MVC)并希望您的高层和管理层看到 ASP.NET 的优势,那么您和您的团队应该花一点时间学习该框架。当您这样做时,您将获得更易于维护的结构化代码。但是,如果您在 ASP.NET 中使用当前的经典 ASP 实践,那么您的上级或您的管理层都可能不会看到使用 ASP.NET 的好处。那将是一种耻辱,因为好处确实存在。:-)

祝你好运!

于 2012-09-07T10:05:56.850 回答
1

根据您的上下文,主要的摩擦点是您的前端开发人员。

因此,决定使用 javascript 框架(Knockout.js、angular.js 等)。让您的前端开发人员设计 UI,该 UI 将从您选择的 Web 堆栈(ASP.NET MVC、Web Api 等)提供的 JSON 中获取所有需要的信息。这将确保他可以使用他想要的工具开发他的 UI。而且您可以在后端工作而不必担心 UI。您只需要同意 JSON 合同并遵守它们。

这样,您将与以下方面保持清晰的关注点分离: - 每个人都使用他们最容易使用的工具进行开发 - 没有层混合和匹配(即在您的代码中“生成”一些 HTML)

而且,您的列表看起来像(使用淘汰赛)(语法可能不准确):

<ul data-bind="foreach: myList">
    <li><span data-bind="text: Text, attr: { id: Id }" /></li>
</ul>

后面的代码(使用 asp.net mvc)(语法可能不准确)

public JsonResult GetList()
{
    var res =  myServiceLayer
        .GetListItems()
        .Select( 
            x => new { Text = x.Val, Id = x.Id } 
        );
    return JsonResult( res );
}
于 2012-09-07T09:40:06.710 回答
0

在这里使用中继器:

<asp:Repeater runat="server" ID="r1">
<ItemTemplate>
  <li rel='#' id='<%# Eval("id","prefix{0}") %>'><span>
     <asp:Label runat="server" ID="t1"><%# Eval("Caption") %></asp:Label>
  </span></li>
</ItemTemplate>
</asp:Repeater>

在cs文件中:

r1.DataSource=list;
r1.DataBind();
于 2012-09-07T09:52:52.750 回答
0

在您提到的特定情况下,在“经典”asp.net 中,您应该使用中继器:http: //msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater( v=vs.80).aspx

<asp:Repeater id="Repeater1" runat="server">                       
    <ItemTemplate>
        <li rel='#' id='task_<%# DataBinder.Eval(Container.DataItem, "TaskID") %>'>
            <span>Whatever</span>
        </li>
      </ItemTemplate>            
 </asp:Repeater>

基本上,了解哪些 web 控件可用,每次需要时创建新控件,并尝试从 asp.net webform 有限的绑定/模板系统中获取尽可能多的信息。

于 2012-09-07T09:43:48.063 回答