【问题标题】:MVC3 Profile setting Property Not Found未找到 MVC3 配置文件设置属性
【发布时间】:2012-07-06 21:16:54
【问题描述】:

在此处输入代码我已经阅读了一些其他类似我的帖子,但仍然没有可用的答案。

我有一个编辑器用于我的个人资料信息,它可以为所选用户获取正确的数据,但是一旦我尝试保存它,我就会收到以下错误。

未找到设置属性“FirstName”。

事情是为了 POST,操作我什至还没有做任何事情。我认为它试图加载或获取配置文件对象以在发布后填充模型。从我可以看到的调用堆栈中没有任何内容可以找到发生这种情况的位置。

Web.Config:

 <profile inherits="MyWeb.BusinessLayer.Models.Account.Profile" enabled="true" defaultProvider="AspNetSqlProfileProvider">
  <providers>
    <clear/>
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="My Website"/>
  </providers>
</profile>

个人资料类

public class Profile : ProfileBase
{
    [Display(Name = "First Name")]
    [Required(ErrorMessageResourceName = "err_req_field", ErrorMessageResourceType = typeof(Resources))]
    [StringLength(50, MinimumLength = 3, ErrorMessageResourceName = "err_len_field", ErrorMessageResourceType = typeof(Resources))]
    public virtual string FirstName
    {
        get
        {
            return (this.GetPropertyValue("FirstName").ToString());
        }
        set
        {
            this.SetPropertyValue("FirstName", value);
        }
    } ... abreviated

控制器动作

    public ViewResult EditProfile(Guid id)
    {
        var user = _userService.Get(id);

        Profile _profile = Profile.GetProfile(user.UserName);

        return View(_profile);
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public RedirectToRouteResult EditProfile(Profile profile)
    {
        return RedirectToAction("Index" , "UserAdministration" );
    }

显示编辑器工作正常,我得到了数据,就在我尝试发布时,我得到了这个。还有其他想法吗?我唯一的其他想法可能是做一个 Ajax Post,拆分参数而不是 Profile 模型,然后只需读取和设置。/.. 想法?

【问题讨论】:

    标签: asp.net-mvc-3 asp.net-profiles


    【解决方案1】:

    在您使用 Profile 类发布表单后,模型绑定器会尝试绑定模型,因此它需要所有属性(“FirstName”等)。

    问题在于表单中的模型不完整(而且不可能),因此配置文件表现为未经授权且未知。

    您可以在 FirstName 属性的 getter 之前设置断点时看到它。断点命中后,查看 Locals 窗口并找到“this”。展开它的 'base' 属性,您会看到 IsAnonymous 属性设置为 true。

    来自 POST 表单后,活页夹无法识别配置文件。解决方案是这样编码:

    [AcceptVerbs(HttpVerbs.Post)]
    public RedirectToRouteResult EditProfile(ProfileModel profileModel)
    {
        // get the current user profile
        Profile profile = Profile.GetUserProfile();
        profile.FirstName = profileModel.FirstName;
    
        // save the profile
        profile.save();
    
        return RedirectToAction("Index" , "UserAdministration" );
    }
    

    因此,您根据当前登录的用户创建用户配置文件,然后更新一些属性。

    【讨论】:

      猜你喜欢
      • 2012-05-31
      • 1970-01-01
      • 2012-05-12
      • 1970-01-01
      • 2017-08-21
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多