MVC3配置文件设置未找到属性

时间:2012-06-05 19:03:08

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

在这里输入代码我已经读过像我这样的其他一些帖子,但仍然没有可用的答案。

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

找不到设置属性'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" );
    }

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

1 个答案:

答案 0 :(得分: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" );
}

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