0

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

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

未找到设置属性“FirstName”。

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

网络配置:

 <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 模型,然后读取并设置。/.. 想法?

4

1 回答 1

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-07-06T13:16:54.637 回答