小编Zaa*_*aak的帖子

从控制器重定向初始化不起作用

我有控制器的覆盖,检查是否存在某些会话数据.存储库正常工作需要此数据,因此如果它不存在,则在检查之后应该注销用户.

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
    base.Initialize(requestContext);
    if (Session["CompanyID"] != null)
    {
        repo.CompanyID = (long)Session["CompanyID"];
    }
    else
    {
        RedirectToAction("LogOff", "Account");
    }
}
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像这样,但即使调用RedirectToAction,控制器仍会打开默认操作,用户也不会注销.你能推荐一下如何处理这个问题吗?

我正在以这种方式使用这个会话数据,因为这是我知道的第一个地方,在这里我可以检查这个特定的数据是否存在.它是在用户登录时写入的.

此数据是数据库中User的一部分.我已经成为自定义成员资格和角色提供者.有没有办法将这些数据以某种方式添加到MembershipUser类型的"User"中,以便可以在构造函数中访问用户用户名?

asp.net-mvc controller asp.net-membership session-variables asp.net-mvc-3

10
推荐指数
1
解决办法
8007
查看次数

自定义验证属性不在客户端上,仅在服务器上

我正在尝试实现自定义属性验证,类似于ScottGu的博客中所示:http: //weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation. ASPX

我有这个电子邮件的自定义验证器属性:

public class EmailAttribute : RegularExpressionAttribute
      {
      public EmailAttribute() :
                base("^[A-Za-z0-9](([_\\.\\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\\.\\-]?[a-zA-Z0-9]+)*)\\.([A-Za-z]{2,})$") { }
      }
Run Code Online (Sandbox Code Playgroud)

我的班级使用它像这样:

    [Required(ErrorMessage = ValidationCiM.MsgObaveznoPolje)]
    [Email(ErrorMessage = ValidationCiM.MsgMailNeispravan)]
    [StringLength(ValidationCiM.LenSrednjePolje, ErrorMessage = ValidationCiM.MsgSrednjePolje)]
    public string Mail { get; set; }
Run Code Online (Sandbox Code Playgroud)

它在服务器端运行良好,模型验证正常,以及一切.但客户端验证不会为此激活第二个属性,它适用于Required,它也适用于StringLength但不适用于电子邮件.我试过包括jquery和Microsoft ajax脚本,但似乎没有区别.

在ScottGu的博客中,他声明如果像这样实现的自定义验证应该可以在不需要添加自定义脚本的情况下工作.

有什么想法吗?

asp.net-mvc custom-validators asp.net-mvc-2-validation asp.net-mvc-3

4
推荐指数
1
解决办法
3109
查看次数

UpdateModel不通过ViewModel更新模型,也不从DropDownListFor更新属性

我正在尝试设置一个编辑视图,我有一个文本框和DropDownListFor.我已经找到了填充DDLF的方法,并且渲染和发布的值是正确的,但我似乎无法让模型正确更新.

我想要更新的对象是从LINQtoSQL生成的,在数据​​库中它有外键列.在LINQtoSQL类中导致"包含"关系.我可以访问代表DB中列的ID属性,以及它所代表的对象.

        zupanija = new Zupanija();       //object that needs to be updated
        zupanija.Drzava;                 //object that i want to change to make the update
        zupanija.DrzavaID;               //Property linked to object that should change
Run Code Online (Sandbox Code Playgroud)

我想出更新的唯一方法是从DDLF获取值并使用它来获取我想要更改的对象,如下所示:

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
         var zupanija = repo.ZupanijaById(id);
         var drzava = new repoDrzava().DrzavaById(Convert.ToInt32(collection["Zupanija.DrzavaID"]));
         zupanija.Drzava = drzava;
        }
Run Code Online (Sandbox Code Playgroud)

此外,当我尝试更新这样的ID字段时,我得到以下错误:

           zupanija.DrzavaID = Convert.ToInt32(collection["Zupanija.DrzavaID"]);
Run Code Online (Sandbox Code Playgroud)

错误:抛出新的System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();

在我看来,这是非常糟糕的方式,我试图让UpdateModel工作.

updatemodel viewmodel asp.net-mvc-3

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