Tag: asp.net mvc 3

使用C#返回JSON,如PHP json_encode

在PHP中返回一些JSON,我会这样做: return json_encode(array(‘param1’=>’data1′,’param2’=>’data2’)); 我如何以最简单的方式在C#ASP.NET MVC3中做等效的操作?

如何使用Fluentvalidation对列表中的每个字符串进行validation?

我有一个MVC3视图模型定义为: [Validator(typeof(AccountsValidator))] public class AccountViewModel { public List Accounts { get; set; } } 使用FluentValidation(v3.3.1.0)定义validation为: public class AccountsValidator : AbstractValidator { public AccountsValidator() { RuleFor(x => x.Accounts).SetCollectionValidator(new AccountValidator()); //This won’t work } } 并且可能会定义帐户validation: public class AccountValidator : AbstractValidator { public OrderValidator() { RuleFor(x => x).NotNull(); //any other validation here } } 我希望列表中的每个帐户都按照文档中的描述进行修改。 但是,对SetCollectionValidator的调用不起作用,因为在使用List时这不是一个选项,尽管如果它被定义为List ,那么该选项就在那里。 […]

如何在ASP.NET MVC 3中的HTTPContext响应中添加标题?

我的页面中有一个下载链接,是我通过用户请求生成的文件。 现在我想显示文件大小,因此浏览器可以显示剩余的下载量。 作为一个解决方案,我想在请求中添加一个Header会起作用,但现在我不知道该怎么做。 这是我的尝试代码: public FileStreamResult DownloadSignalRecord(long id, long powerPlantID, long generatingUnitID) { SignalRepository sr = new SignalRepository(); var file = sr.GetRecordFile(powerPlantID, generatingUnitID, id); Stream stream = new MemoryStream(file); HttpContext.Response.AddHeader(“Content-Length”, file.Length.ToString()); return File(stream, “binary/RFX”, sr.GetRecordName(powerPlantID, generatingUnitID, id) + “.rfx”); } 当我检查fiddler时,它没有显示Content-Length标题。 你们能帮助我吗?

我尝试这样做时出现模板错误?

我正在使用asp.net mvc 3并且我一直收到此错误,因为我没有使用模板,所以我不理解它。 我在局部视野中有这个 @model ViewModels.FormViewModel @Html.TextBoxFor(x => x.Due.ToShortDateString()) 在我的viewmodel中 public class FormViewModel { public DateTime Due { get; set; } public FormViewModel() { DueDate = DateTime.UtcNow; } } 我收到这个错误 模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。 描述:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 exception详细信息:System.InvalidOperationException:模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。

具有租户特定角色的ASP.NET多租户应用程序

我们有一个多租户ASP.NET应用程序。 到目前为止,租户已经相互隔离,但现在我们有代理商管理多个租户,并希望能够通过一个用户帐户管理所有租户。 我正试图找出实现这一目标的最佳方法,希望对我们正在使用的现有技术没有太大的改变。 相关技术细节: 成员和角色的AspNetSqlMembershipProvider C#4.0(很快将是4.5) 表单身份validation aspx和MVC(v3)页面 假设有100个或更多租户,因此任何解决方案都需要支持 我相信这些要求与SQL Server的安全模型非常相似。 我们有一组登录,代表可以登录系统的所有用户。 用户应该能够被赋予一个或多个数据库(租户)的角色。 示例:用户Bob在公司A中具有管理员角色,但在公司B中只有用户角色。我们公司的员工也有“sysadmin”角色,允许我们访问任何租户以及创建/删除租户等专业管理权限等 我已经对各种库,框架等进行了大量研究,但我没有找到任何令人信服的证据表明其他库或框架将比我们现有的更好。 所以我现在正在考虑如何让Sql Membership provider做我想做的事情,除非有人能指出我更好的方向。 我也不确定我是否知道在此搜索的最佳条款。 我有2个选项我正在考虑: 只向会员提供者添加少量角色,并处理会员提供者之外的“当前用户在此租户中是否具有此角色”的所有问题。 成员资格提供程序将用于处理对系统的基本访问。 将租户特定角色添加到成员资格提供者。 我们将拥有(角色数)x(租户数)在系统中的总角色。 每个新租户都会向系统添加另一组角色,例如“租户A:管理员”,“租户A:用户”等。需要一些额外的表来管理关系以及可能需要一些自定义代码以确保访问权限从成员资格提供者请求正确的特定于租户的角色。 这些选项中的任何一个都不错吗 或者我应该到别处寻找支持吗?

从MVC视图保存多个对象

我正在编写我的第一个MVC3应用程序,它是一个简单的订单跟踪应用程序。 我想同时编辑订单和细节。 当我编辑订单时,Edit的ActionResult返回订单和关联的行(我也使用EF)。 public ActionResult Edit(int id) { // Get the order with the order lines var orderWithLines = from o in db.Orders.Include(“OrderLines”) where o.ID == id select o; // Not sure if this is the best way to do this. // Need to find a way to cast to “Order” type List orderList = […]

signalR – 获取用户名

我正在使用signalr和asp.net MVC3来构建示例聊天应用程序。 这是我的信号器中心的样子 public class MyHub:Hub,IDisconnect { public Task Join() { string username = HttpContext.Current.User.Identity.Name; //find group based on username string group = getGroup(username) return Groups.Add(Context.ConnectionId, group); } public void doStuff() { string group = getGroup(); Clients[group].doStuffOnBrowser(); } } 我的问题是我的应用程序在页面加载时崩溃了。 在使用调试器时,我发现即使用户已经过身份validation,HttpContext.Current.User.Identity.Name仍为null。 如何在Task Join()方法中获取用户名?

ValidationMessageFor与AddModelError(key,message)一起使用。 关键是什么?

我正在为某个viewModel属性开发客户端和服务器端validation。 在.cshtml文件中我把它: @Html.DropDownListFor(model => model.EntityType.ParentId, Model.ParentTypeList, “”) @Html.ValidationMessageFor(model => model.EntityType.ParentId) 在Controller中进行业务validation catch (BusinessException e) { ModelState.AddModelError(“EntityType.ParentId”, Messages.CircularReference); } 以上工作符合预期:如果捕获到exception,则消息将显示在下拉列表旁边。 但是,我发现这种方式并不是很优雅。 在cshtml ,我使用一种方法来生成有关validation的所有必需信息。 在控制器中,我必须知道确切的Key字符串并使用它。 这样做有没有更好的方法?

在异步任务中使用HttpContext

我有以下mvc动作。 public async Task DoSomeLongRunningOperation() { return await Task.Run(() => { //Do a lot of long running stuff //The underlying framework uses the HttpContext.Current.User.Identity.Name so the user is passed on the messagebus. } } 在任务中,HttpContext变为null。 我们做了很多尝试,但没有任何事情让我们确信HttpContext总是在我们的新线程中可用。 有没有在异步任务中使用HttpContext的解决方案? 在我们的Io​​cContainer中,我们注册了以下对象,该对象将用户名传递给框架。 public class HttpContextUserIdentityName : ICredentials { public string Name { get { return HttpContext.Current.User.Identity.Name; } } } […]

ASP.NET IAuthorizationFilter OnAuthorization

嗨,我正在尝试实现自定义授权filter //The Authourization attribute on a controller public class CustomAdminAuthorizationFilter : IAuthorizationFilter { private readonly IAuthentication _authentication; public SageAdminAuthorizationFilter(IAuthentication authentication) { _authentication = authentication; } public void OnAuthorization(AuthorizationContext filterContext) { bool result = _authentication.Authorize(filterContext.HttpContext); } } 正如你在OnAuthorization上看到的那样,我得到的结果是假的。 我需要设置什么才能返回我来自哪里? 编辑: 它似乎仍然让我直接进入登录页面 我注射了IAuthetication this.BindFilter(FilterScope.Controller, 0); Bind().To(); 然后我在控制器中装饰我的动作。 [Authorize] public ActionResult Index() { ViewBag.Title = “Welcome”; ViewBag.Message = […]