小编Sam*_*ill的帖子

手动调用ModelState验证

我正在使用ASP.NET MVC 3代码优先,我已经将验证数据注释添加到我的模型中.这是一个示例模型:

public class Product
{
    public int ProductId { get; set; }

    [Required(ErrorMessage = "Please enter a name")]
    public string Name { get; set; }

    [Required(ErrorMessage = "Please enter a description")]
    [DataType(DataType.MultilineText)]
    public string Description { get; set; }

    [Required(ErrorMessage = "Please provide a logo")]
    public string Logo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在我的网站中,我有一个创建新产品的多步骤过程 - 第1步输入产品详细信息,第2步其他信息等.在每个步骤之间我将每个对象(即Product对象)存储在Session中,因此用户可以返回到该过程的那个阶段并修改他们输入的数据.

在每个屏幕上,我都有客户端验证,使用新的jQuery验证.

最后阶段是确认屏幕,之后将在数据库中创建产品.但是,因为用户可以在各个阶段之间跳转,所以我需要验证对象(产品和其他一些对象)以检查它们是否已正确完成数据.

有没有办法以编程方式在具有数据注释的对象上调用ModelState验证?我不想浏览对象上的每个属性并进行手动验证.

如果能够更轻松地使用ASP.NET MVC 3的模型验证功能,我愿意接受如何改进此过程的建议.

.net c# asp.net-mvc asp.net-mvc-validation asp.net-mvc-3

57
推荐指数
2
解决办法
4万
查看次数

实体框架代码第一个计算属性

我在ASP.NET MVC 3 Web应用程序中使用Entity Framework"Code First"方法.在我的数据库中,我有几个计算列.我需要使用这些列来显示数据(工作正常).

但是当我在这个表中插入行时,我收到以下错误:

无法修改"ChargePointText"列,因为它是计算列或是UNION运算符的结果.

有没有办法在我的课堂上将房产标记为只读?

public class Tariff
{
    public int TariffId { get; set; }
    public int Seq { get; set; }
    public int TariffType { get; set; }
    public int TariffValue { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public int ChargePoint { get; set; }
    public string ChargePointText { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

entity-framework ef-code-first entity-framework-4.1

19
推荐指数
1
解决办法
2万
查看次数

带输出参数的ExecuteSqlCommand

我在ASP.NET MVC3应用程序中使用Entity Framework,我正在尝试使用以下代码:

var token = "";
this.Database.ExecuteSqlCommand("exec dbo.MyUsp", new SqlParameter("token", token));
Run Code Online (Sandbox Code Playgroud)

我的存储过程签名是:

CREATE PROCEDURE MyUSP(@token varchar(10) OUT)
(...)
Run Code Online (Sandbox Code Playgroud)

当我使用这段代码时,我得到一个错误,说参数"@token"是预期的,但没有提供.

如何告诉EF令牌参数是否用于输出?

asp.net-mvc entity-framework asp.net-mvc-3

19
推荐指数
4
解决办法
4万
查看次数

依赖注入结构图ASP.NET Identity MVC 5

我正在使用新的ASP.NET MVC 5 Identity框架进行身份验证.我传统上使用StructureMap进行依赖注入,但是我在使用新的AccountController进行连接时遇到了问题.

我的AccountController构造函数如下所示:

    public AccountController()
        : this(new UserManager<OmpUser>(new UserStore<OmpUser>(new OmpDbContext())))
    {    

    }

    public AccountController(UserManager<OmpUser> userManager)
    {
        UserManager = userManager;
    }
Run Code Online (Sandbox Code Playgroud)

我的StructureMap配置如下所示:

public static class IoC {
    public static IContainer Initialize() {
        ObjectFactory.Initialize(x =>
                    {
                        x.Scan(scan =>
                                {
                                    scan.TheCallingAssembly();
                                    scan.WithDefaultConventions();
                                });

                        //x.Register<IUserStore<OmpUser>>(() =>
                        //    new UserStore<OmpUser>(new OmpDbContext()));

                        x.For<OMPEntities>().HttpContextScoped();

                    });
        return ObjectFactory.Container;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行项目时,我收到以下错误:

尝试获取AccountController类型的实例时出现激活错误,键""

有关如何为构造注入新建UserManager对象的任何想法?我试过四处寻找但却找不到多少指导.

asp.net-mvc-5

15
推荐指数
1
解决办法
6803
查看次数

ASP.NET MVC 3自定义授权

我正在编写一个ASP.NET MVC 3应用程序,我有很多角色:

系统管理员,客户管理员,预算所有者,应用所有者

我知道我可以使用[Authorize(Roles ="...")]属性轻松限制对某些控制器(和操作方法)的访问.

但是,某些授权不仅仅基于角色,而是基于权限.例如,预算所有者应该只能访问分配给其成本中心的预算 - 而不是其他人的预算.

目前我在action方法中有一些代码来检查:

if(UserCapabilities.CanAccessBudget(budgetId))
{
  // get budget and show view
}
else
{
  // redirect to index action
}
Run Code Online (Sandbox Code Playgroud)

这开始使我的代码变得混乱并使检查安全性变成一场噩梦 - 因为我有许多需要这些不同类型的授权检查的动作方法.

我有一个想法是编写一些自定义属性,我可以用它来装饰我的操作方法并清理我的代码:

//
// GET: /Budgets/View/1
[CanAccessBudget]
public ActionResult View(int id)
{
 //...
}
Run Code Online (Sandbox Code Playgroud)

人们怎么想?编写自定义属性是最干净,最易维护的方法吗?

asp.net-mvc asp.net-mvc-3

7
推荐指数
1
解决办法
2825
查看次数

ASP.NET MVC获取具有特定配置文件属性的用户列表

我正在使用ASP.NET MVC 1,并且我使用WebProfile Builder VS加载项添加了一个自定义Profile类(可在此处找到:http://code.msdn.microsoft.com/WebProfileBuilder/Release/ProjectReleases.aspx?ReleaseId = 980).

在我的一个表单上,我想要一个共享特定配置文件值的所有用户的下拉列表.

我可以看到我可以使用以下命令获取所有用户的列表:

Membership.GetAllUsers()
Run Code Online (Sandbox Code Playgroud)

但是,我无法看到如何获得具有特定配置文件值的所有用户,在我的例子中是CellId.

我是以正确的方式接近这个吗?我使用成员资格角色来定义哪些用户是管理员等,但是配置文件似乎是分组用户的正确位置.

任何关于如何访问用户列表的细节以及关于我是否在这里寻求正确途径的评论都将非常感激.

非常感谢,Sam

asp.net-mvc asp.net-membership asp.net-profiles

5
推荐指数
1
解决办法
3022
查看次数

在ASP.NET Identity 2.0.0-beta1中禁用双因素身份验证

我正在使用ASP.NET Identity的最新2.0.0-beta1版本,我不想使用新的双因素身份验证支持.实际上我想删除其他数据库列EmailConfirmed,PhoneNumber,PhoneNumberConfirmed和TwoFactorEnabled,但我无法看到我需要覆盖Identity类来禁用此功能.

asp.net asp.net-identity

5
推荐指数
1
解决办法
3591
查看次数

仅更新模型的一部分

我正在使用 ASP.NET MVC 3 和实体框架代码优先。我有一个页面(使用 Razor View Engine),它允许用户更新模型(产品)的一部分:

@Html.LabelFor(model => model.Overview) @Html.TextAreaFor(model => model.Overview)

@Html.LabelFor(model => model.Description)
@Html.TextAreaFor(model => model.Description)

@Html.HiddenFor(model => model.ProductId)
Run Code Online (Sandbox Code Playgroud)

我的控制器方法如下所示:

[HttpPost]
public ActionResult Update(Product product)
{
  db.Products.Attach(product);
  db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

我想要做的就是更新产品模型的概述和描述属性。但是,当我运行代码时,模型没有在数据库中更新,我也没有收到任何错误。

当我在调试时检查产品对象时,我发现虽然 ProductId、Overview 和 Description 字段是正确的(根据 FORM POST),但其他字段是 NULL(我期望的)。

我想知道产品对象的不完整状态是否导致它无法保存到数据库?

这是模型:

公共类产品{ public int ProductId { get; 放; }

    [Required(ErrorMessage = "Please enter a description")]
    [DataType(DataType.MultilineText)]
    public string Description { get; set; }

    [DataType(DataType.MultilineText)]
    public string Overview { get; set; }

    public int SupplierId { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc asp.net-mvc-3

2
推荐指数
1
解决办法
1102
查看次数