我正在将MVC添加到具有许多遗留webform页面的项目中.这很好用.但是,我目前有一个单独的MVC和webforms母版页.两个母版页产生基本相同的输出.我真的很想杀掉webforms,只需使用我的所有页面的MVC母版页并保持干净.
当我忘记改变两者时,不是DRY已经咬了我几次.
我试着用显而易见的方法,只是将webform内容页面的MasterPage属性指向MVC主页面.这会抛出一个错误,说MVC主控只能使用MVC视图.
这似乎是混合MVC和webform项目的一个相当普遍的问题.我的MVC主人没有对ViewData做任何事情,所以我没有看到webforms无法使用它们的任何原因.
我知道Web表单定义的行为是不提交禁用的字段......但这不是我想要的定义.我想使用ajax发布表单,我想让它获取所有字段,即使它们被禁用.我不想构建一个解决方法,我将字段"看起来禁用"...或者必须在我启用字段的地方进行破解 - > post - > disable.
是否有可能使ajaxSubmit()或serialize()抓住禁用的字段,因为它正在移动DOM并获取值?或者是否有另一个序列化插件可以做到这一点?或者有人有一个mod我可以使用其中一个插件使其工作?
还是我注定要破解它?
电子表格仍会显示,但会显示警告消息.问题似乎发生,因为Excel 2007对于匹配其扩展的格式比早期版本的Excel更加挑剔.
该问题最初是由ASP.Net程序发现的,并在Excel错误中产生"您尝试打开的文件",Spreadsheet.aspx-18.xls',其格式与文件扩展名指定的格式不同.验证...".但是,当我打开文件时它显示正常.我正在使用Excel 2007.Firefox将该文件识别为Excel 97-2003工作表.
这是一个生成问题的ASP.NET页面:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Spreadsheet.aspx.cs" Inherits="Spreadsheet" %>
Run Code Online (Sandbox Code Playgroud)
文件背后的代码如下:
public partial class Spreadsheet : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e)
{
Response.ContentType = "application/vnd.ms-excel";
Response.Clear();
Response.Write("Field\tValue\tCount\n");
Response.Write("Coin\tPenny\t443\n");
Response.Write("Coin\tNickel\t99\n");
}
Run Code Online (Sandbox Code Playgroud)
}
Ť
我知道微软推出ASP.NET MVC的原因是为了简化为ASP.NET进行测试驱动设计(TDD).但是,我在ASP.NET WebForms中有一个相当大的棕色字段(现有)应用程序,我很乐意在其中实现一些TDD类型的功能.我假设有一种方法可以做到这一点,但有哪些可行的选择?
我一直在思考如何在页面上获取所有控件,然后在相关问题中对它们执行任务:
我需要可以扫描页面的代码,获取所有DropDownList控件并将它们返回到列表中.
我目前不得不编辑每个单独的控件,我宁愿能够动态循环每个控件来执行我的任务.
我试图找到一种方法来使用ASP.NET Web窗体控件的依赖注入.
我有很多控件可以直接创建存储库,并使用它们来访问和绑定数据等.
我正在寻找一种模式,我可以将存储库传递到外部控件(IoC),因此我的控件仍然不知道如何构建存储库以及它们来自何处等.
我不希望从我的控件中依赖IoC容器,因此我只希望能够使用构造函数或属性注入来构造控件.
(只是为了使事情复杂化,这些控件正在构建并在运行时由CMS放置在页面上!)
有什么想法吗?
正如主题所要求的那样.
编辑1
在处理请求以便在用户控件中存储对父页面的引用时,有时可能会这样吗?
我正在尝试使用jQuery 处理元素submit事件form.
$("form").bind("submit", function() {
alert("You are submitting!");
});
Run Code Online (Sandbox Code Playgroud)
当表单提交时(作为回发的一部分,例如当我点击按钮或链接按钮时),它永远不会触发.
有没有办法让这项工作?我可以附加触发提交的各个元素的事件,但这不太理想 - 有太多的可能性(例如具有autopostback = true的下拉列表,键盘快捷键等)
更新:这是一个最小的测试用例 - 这是我的aspx页面的全部内容:
<%@ page language="vb" autoeventwireup="false" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:scriptmanager id="ScriptManager" runat="server" enablepartialrendering="true">
<scripts>
<asp:scriptreference path="/Standard/Core/Javascript/Jquery.min.js" />
</scripts>
</asp:scriptmanager>
<p>
<asp:linkbutton id="TestButton" text="Click me!" runat="server" /></p>
</div>
</form>
<script type="text/javascript">
$(document).ready(function() {
alert("Document ready.");
$("form").submit(function() {
alert("Submit detected.");
});
});
</script>
</body> …Run Code Online (Sandbox Code Playgroud) 我有一些基本上看起来像这样的代码:
<div>
<% if(Something) { %>
<div id="someUniqueMarkup">
This markup should not be output if Something==true.
<units:MyUserControl runat="server"/>
</div>
<% }
else { %>
<units:MyUserControl runat="server" />
<% } %>
</div>
Run Code Online (Sandbox Code Playgroud)
取决于Something,其中一个是隐藏的,这很好.但是如果我在用户控件中设置断点,我会注意到它被加载了两次(对于上面的每个控件都加载了一次)并且它的所有逻辑都运行了两次.我当然可以用占位符或多视图来控制它,但是同样的事情似乎适用 - 对于页面上实际存在的每个控件都运行一次OnLoad/ Page_Loadetc.
编辑:
我显示/隐藏这个的原因是因为我需要在控件周围包含一些标记if Something == true.我可以在控件之前和之后的if-else中包装"unique markup"本身,但这对于真正应该像我上面想象的那样简单的东西来说似乎很脏.在这两种情况下,用户控件本身应该完全相同,抱歉它具有令人困惑的属性.
它只是我,还是这只是一个非常不直观的界面?并且只要它在页面上,它实际上是否可以不加载/执行用户控件?
我与我的一位朋友争吵,他是一家大型互联网公司的建筑师.基本上他说ASP.NET MVC不适用于大型企业应用程序,它不像WebForms那样灵活,而且MVC应用程序比Web表单应用程序慢.
根据我自己使用MVC的经验,我可以说它更灵活,重量更轻,因为没有页面生命周期,viewstate等等.因此,它应该加载至少更快.据我所知,MVC专为中大规模流量而设计.
你们有什么感想?有没有人比较速度和性能?ASP.NET MVC比ASP.NET WebForms更适合大规模应用吗?
简而言之,在这两种选择之间,您会选择哪种选择用于大规模企业应用程序?
webforms ×10
asp.net ×6
c# ×4
asp.net-mvc ×2
jquery ×2
architecture ×1
comparison ×1
dry ×1
excel ×1
form-submit ×1
html ×1
legacy ×1
master-pages ×1
performance ×1
tdd ×1
xls ×1