我一直在浏览这个网站,我看过一些关于如何从Web窗体"迁移"到MVC的帖子......但作为一个开发人员在一个复杂的Web窗体应用程序上工作,我根本就没有时间完全迁移.我想要做的是使用MVC添加所有新内容,并在我有时间(和/或也有)时迁移旧内容.我看到MVC对我的环境有很多好处.
另外需要注意的是,目前所有Web窗体.aspx都存在于根目录中,并且我有一些旧学校URL重写设置(例如:"/id/123/s/whatever/PageName.aspx" - >" /PageName.aspx?id=123&s=whatever")可能使事情复杂化.
还有一个使用MasterPages的模板系统可能会带来挑战.这些与MVC处理方式不同吗?
此时我还没有添加任何与我的应用程序相关的MVC.
那么,我如何一步一步地将我的第一个模型,视图和控制器添加到现有的Web窗体应用程序中?
编辑:
我还发现这篇文章详细介绍了我需要做的事情:http://blogs.imeta.co.uk/MGodfrey/archive/2009/03/31/663.aspx
不幸的是它仍然没有用.我想因为我有一个网站,而不是一个Web应用程序.(换句话说,我的类位于App_Code目录中).
我想使用ComponentModel DataAnnotations验证两个属性中至少有一个属性值.我的模型看起来像这样:
public class FooModel {
public string Bar1 { get; set; }
public int Bar2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
基本上,我想验证FooModel,以便需要Bar1 或 Bar2.换句话说,您可以输入一个,或另一个,或两者,但您不能将它们都留空.
我希望这对于服务器端和不显眼的客户端验证都有效.
编辑:这可能是重复,因为这看起来类似于我想要做的
我正熟悉ASP.Net-MVC,我试图完成我过去用webforms和其他功能完成的一些常见任务.关于我需要做的最常见的任务是创建SEO友好的URL,这在过去意味着做一些url重写以在目录路径中构建查询字符串.
例如:www.somesite.com/productid/1234/widget
而不是:www.somesite.com?productid=1234&name=widget
在ASP.Net-MVC中我用什么方法来完成这个?
我一直在四处寻找,而我所发现的就是这个,要么我不能正确理解,要么我没有真正回答我的问题:
我注意到Visual Studio默认DOCTYPE为XHTML 1.0 Transitional.这似乎没问题,但我认为这更像是"第6代"浏览器的标准.我们现在处于第7代和第8代浏览器中,我想知道我应该在HTML中添加什么DOCTYPE.
在相关说明:有没有办法将其他DOCTYPE添加到Visual Studio 2008中的HTML验证?工具>选项>文本编辑器> HTML>验证
我有一个应用程序,通过套接字连接发送不同大小的可序列化对象,我希望它尽可能地扩展.也可能有数十甚至数百个连接.
所以似乎有太多的方法可以给这只猫留下光彩,而且我不确定什么才是最有效的.我是:
只需使用BinaryFormatter读取NetworkStream?
var netStream = client.GetStream();
var formatter = new BinaryFormatter();
var obj = formatter.Deserialize(netStream);
Run Code Online (Sandbox Code Playgroud)
或者使用新的异步/等待内容做一些魔术:
using(var ms = new MemoryStream())
{
var netStream = client.GetStream();
var buffer = new byte[1028];
int bytesRead;
while((bytesRead = await netStream.ReadAsync(buffer, 0, buffer.length)) > 0) {
ms.Write(buffer, 0, buffer.Length);
}
var formatter = new BinaryFormatter();
var obj = formatter.Deserialize(ms);
}
Run Code Online (Sandbox Code Playgroud)
或者与上面类似,只利用新的CopyToAsync方法:
using(var ms = new MemoryStream())
{
var netStream = client.GetStream();
await netStream.CopyToAsync(ms); //4096 default buffer.
var …Run Code Online (Sandbox Code Playgroud) 编辑:这显然只是Chrome中的一个问题,它在FF和IE中运行良好
Chrome版本:27.0.1453.116
我在localhost:13371上有一个简单的JS/HTML站点,我正在尝试访问localhost:13371上的SignalR中心.
无论何时发出请求,我都会收到以下错误:
XMLHttpRequest无法加载
http://localhost:13370/signalr/hubs/negotiate?_=1372338722032.原产地http://localhost:13371不被访问控制允许来源允许的.
在SignalR上启用跨域Application_Start:
RouteTable.Routes.MapHubs(new HubConfiguration { EnableCrossDomain = true });
Run Code Online (Sandbox Code Playgroud)在SignalR服务器的Web.Config中启用跨域:
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="*" />
<add name="Access-Control-Allow-Headers" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)在JavaScript中设置信号器中心的连接URL:
$.connection.hub.url = 'http://localhost:13370/signalr/hubs';
Run Code Online (Sandbox Code Playgroud)在jQuery中启用CORS:
$.support.cors = true;
Run Code Online (Sandbox Code Playgroud)手动设置响应头Application_BeginRequest:
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
//These headers are handling the "pre-flight" OPTIONS call sent by the browser
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, …Run Code Online (Sandbox Code Playgroud)我一直试图弄清楚为什么我的观点在我的暂存环境中返回404,而不是我的开发环境.
Global.asax中的第一个Route条目如下:
routes.MapRoute(
"FindStore",
"FindStore",
new { controller = "FindStore", action = "Index" });
Run Code Online (Sandbox Code Playgroud)
所有视图都存在于适当的目录中.
基本上如果我去http:// StagingServer/FindStore我得到404错误.我见过的每个其他答案都与IIS 6有关,我没有运行.
我的ASP.Net应用程序存在内存泄漏问题.我尝试过WinDbg,IMO显示的内容大多无用,我正在尝试让CLR分析器工作.
我的问题是每次我尝试"配置文件ASP.NET"它只是快速闪烁两个控制台我无法读取它们,然后CLR Profiler的标题栏说"启动IIS.出现错误2".
其他要知道的事情:
我尝试以管理员身份运行CLR Profiler.
我真的需要确定我的内存泄漏的来源,任何帮助将不胜感激.
编辑:
我已经看过了:http: //msdn.microsoft.com/en-us/library/ff650691.aspx
我对以下情况感到困惑.假设我有一个带行的表.当用户单击表中的按钮时,我希望用户表单向下滑动jQuery并显示包含所选行值的表单.以下是我目前正在做的事情,这没有多大意义:
视图
<tr ng-click="setItemToEdit(item)" slide-down-form>
Run Code Online (Sandbox Code Playgroud)
...
<form>
<input type="test" ng-model={{itemToEdit.Property1}} >
<button ng-click=saveEditedItem(item)" slide-up-form>
<form>
Run Code Online (Sandbox Code Playgroud)
控制
$scope.itemToEdit = {};
$scope.setItemToEdit = function(item) {
$scope.itemToEdit = item;
});
$scope.saveEditedItem = function(item) {
myService.add(item);
$scope.itemToEdit = {};
}
Run Code Online (Sandbox Code Playgroud)
指令 - 上滑/下滑
var linker = function(scope, element, attrs) {
$(form).slideUp(); //or slide down
}
Run Code Online (Sandbox Code Playgroud)
似乎我的指令和我的控制逻辑太过断开了.例如,如果存在保存错误会发生什么?表单已隐藏,因为slideUp事件已完成.在这种情况下,我很可能想要阻止slideUp操作.
我只使用AngularJS大约一个星期,所以我确信有些东西我不见了.
我想在一个URI上设置一个基本套接字ws://localhost:1234/mysocket(模仿用Java创建的另一个环境),到目前为止我只能设置它ws://localhost:1234/ 如何才能让它在一个特定的URL上托管而不仅仅是一个主机和港口?
这只是文档中的基本NodeJS套接字:
var net = require('net');
var server = net.createServer(function (socket) {
socket.write('Echo server\r\n');
socket.pipe(socket);
});
server.listen(1337, '127.0.0.1'); // <-- not sure what to do here?
Run Code Online (Sandbox Code Playgroud)
我特别不要求涉及Socket.IO的解决方案.
我觉得我可能真的需要在我的套接字服务器前设置一个代理?但这似乎有点奇怪.
asp.net-mvc ×4
asp.net ×2
c# ×2
iis-7 ×2
.net-4.5 ×1
angularjs ×1
async-await ×1
c#-5.0 ×1
clrprofiler ×1
cross-domain ×1
doctype ×1
html ×1
memory-leaks ×1
node.js ×1
routing ×1
signalr ×1
sockets ×1
validation ×1
xhtml ×1