假设我有以下jQuery AJAX调用:
$.ajax({
type: "POST",
url: "MyUrl",
data: "val1=test",
success: function(result){
// Do stuff
}
});
Run Code Online (Sandbox Code Playgroud)
现在,当进行这个AJAX调用时,我希望服务器端代码运行一些错误处理检查(例如,用户是否仍然登录,他们是否有权使用此调用,数据是否有效等).如果检测到错误,如何将该错误消息重新发送回客户端?
我最初的想法是返回一个带有两个字段的JSON对象:error和errorMessage.然后将在jQuery AJAX调用中检查这些字段:
$.ajax({
type: "POST",
url: "MyUrl",
data: "val1=test",
success: function(result){
if (result.error == "true")
{
alert("An error occurred: " & result.errorMessage);
}
else
{
// Do stuff
}
}
});
Run Code Online (Sandbox Code Playgroud)
这对我来说有点笨拙,但它确实有效.还有更好的选择吗?
我的ASP.NET MVC Web应用程序中的控制器开始变得有点臃肿与业务逻辑.Web上的示例都显示了简单的控制器操作,这些操作只是将数据从存储库中提取出来并将其传递给视图.但是如果你还需要支持业务逻辑呢?
比如说,履行订单的动作也需要发送电子邮件.我是否将其粘贴在控制器中并将此逻辑复制/粘贴到同时满足订单的任何其他操作?我的第一个直觉是创建一个像OrderFulfillerService这样的服务来处理所有这些逻辑并让控制器动作调用它.但是,对于从数据库中检索用户列表或订单等简单操作,我希望直接与存储库进行交互,而不是让服务包含该调用.
这是一种可接受的设计模式吗?控制器操作在需要数据访问时需要业务逻辑和存储库时调用服务?
发布我的ASP.NET MVC Web应用程序的新版本后,我经常看到浏览到该站点时抛出此异常:
System.Web.Mvc.HttpAntiForgeryException:未提供所需的防伪标记或无效.---> System.Web.HttpException:viewstate MAC验证失败.如果此应用程序由Web场或群集托管,请确保配置指定相同的validationKey和验证算法.AutoGenerate不能在群集中使用.---> System.Web.UI.ViewStateException:无效的viewstate.
在我的Web应用程序中访问的每个页面上都会继续发生此异常,直到我关闭Firefox.重新打开Firefox后,该网站运行良好.知道发生了什么事吗?
补充说明:
什么是防止字典攻击的最佳方法?我已经想到了几个实现,但它们似乎都有一些缺陷:
使用Rails ActiveRecord构造where子句的最佳方法是什么?例如,假设我有一个控制器操作,它返回一个博客帖子列表:
def index
@posts = Post.all
end
Run Code Online (Sandbox Code Playgroud)
现在,假设我希望能够传入url参数,以便此控制器操作仅返回特定作者的帖子:
def index
author_id = params[:author_id]
if author_id.nil?
@posts = Post.all
else
@posts = Post.where("author = ?", author_id)
end
end
Run Code Online (Sandbox Code Playgroud)
这对我来说感觉不太干.如果我要添加排序或分页或更糟糕的是,更多可选的URL查询字符串参数进行过滤,此控制器操作将变得非常复杂.
我最近一直在使用StructureMap并且彻底享受了这种体验.但是,我可以看到如何通过连接所有内容轻松地将其带走,并最终获得将大量接口引入其构造函数的类.尽管在使用依赖注入框架时这确实不是一个大问题,但它仍然认为某些属性实际上不需要为了连接它们而需要接口.
你在哪里画出界面的界限而不仅仅是在课堂上添加一个属性?
大多数Rails教程展示如何通过params哈希填充模型类,如下所示:
class UsersController < ApplicationController
def create
@user = User.create(params[:user])
# more logic for saving user / redirecting / etc.
end
end
Run Code Online (Sandbox Code Playgroud)
如果模型中的所有属性都应该是字符串,那么这很有用.但是,如果某些属性应该是整数或日期或其他类型,会发生什么?
例如,假设User类看起来像这样
class User < ActiveRecord::Base
attr_accessible :email, :employment_start_date, :gross_monthly_income
end
Run Code Online (Sandbox Code Playgroud)
:email属性应该是一个字符串,:employment_start_date属性应该是一个日期,而:gross_monthly_income应该是一个小数.为了使这些属性具有正确的类型,我是否需要更改控制器操作以使其看起来像这样?
class UsersController < ApplicationController
def create
@user = User.new
@user.email = params[:user][:email]
@user.employment_start_date = params[:user][:employment_start_date].convert_to_date
@user.gross_monthly_income = params[:user][:gross_monthly_income].convert_to_decimal
# more logic for saving user / redirecting / etc.
end
end
Run Code Online (Sandbox Code Playgroud) 目前,我正在使用许多博客文章中找到的策略.基本上,URL包含页码(例如/ Users/List/5将为您的分页用户列表第5页上的用户提供).但是,我没有遇到一个页面必须列出两个单独的分页列表的情况.如何使用ASP.NET MVC进行此操作?我只提供两个url参数(例如/ Users/List?page1 = 1&page2 = 2)?使用部分视图有更好的方法吗?
我必须密集.在对StackOverflow提出几个问题后,在掌握ASP.NET MVC提供的新路由引擎时,我仍然感到茫然.我想我已经把问题缩小到一个非常简单的问题,如果解决了,可能会让我解决其余的路由问题.所以这里是:
您将如何注册支持类似Twitter的用户配置文件的路由?
www.twitter.com/username
假设还需要支持:
默认{controller}/{action}/{id}
路由.
网址如:
www.twitter.com/login
www.twitter.com/register
这可能吗?
asp.net-mvc ×4
activerecord ×2
.net ×1
ajax ×1
cryptography ×1
jquery ×1
nhibernate ×1
paging ×1
routing ×1
security ×1
validation ×1