gpt4 book ai didi

asp.net-mvc - 配置文件对象 + View 模型 + 更新用户配置文件 MVC C#

转载 作者:行者123 更新时间:2023-12-04 16:01:52 25 4
gpt4 key购买 nike

问题:
我创建了一个自定义配置文件对象,如 Joel here 所述。 .然后我使用 Jeremy 的方法 ( here ) 扩展自定义配置文件以允许我使用生成用户并设置这些值。然后我创建了一个 ViewModel 来显示成员(member)信息和个人资料信息,以便用户可以更新他们的成员(member)信息(电子邮件)和个人资料信息。 ** View 显示我在 View 中更新信息中输入的所有字段并单击保存,在那里我收到以下错误

System.Configuration.SettingsPropertyNotFoundException: The settings property 'FirstName' was not found. **



这是我的自定义配置文件对象(模型):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Profile;
using System.Web.Security;


namespace NDAC.Models
{
public class ProfileInformation : ProfileBase
{
static public ProfileInformation CurrentUser
{
get
{
if (Membership.GetUser() != null)
{
return (ProfileInformation)(ProfileBase.Create(Membership.GetUser().UserName));
}
else
{
return null;
}
}
}

public virtual string FirstName {
get
{

return ((string)(base["FirstName"]));
}
set
{
base["FirstName"] = value; Save();
}
}
public virtual string LastName {
get
{
return ((string)(base["LastName"]));
}
set
{
base["LastName"] = value; Save();
}
}
public string Street
{
get
{
return ((string)(base["Street"]));
}
set
{
base["Street"] = value; Save();
}
}
public string Street2
{
get
{
return ((string)(base["Street2"]));
}
set
{
base["Street2"] = value; Save();
}
}
public string City
{
get
{
return ((string)(base["City"]));
}
set
{
base["City"] = value; Save();
}
}
public string State
{
get
{
return ((string)(base["State"]));
}
set
{
base["State"] = value; Save();
}
}
public string ZipCode
{
get
{
return ((string)(base["ZipCode"]));
}
set
{
base["ZipCode"] = value; Save();
}
}
public string PhoneNumber
{
get
{
return ((string)(base["PhoneNumber"]));
}
set
{
base["PhoneNumber"] = value; Save();
}
}
public string SemesterID
{
get
{
return ((string)(base["SemesterID"]));
}
set
{
base["SemesterID"] = value; Save();
}
}

static public ProfileInformation GetProfile(string username)
{
return Create(username) as ProfileInformation;
}

internal static ProfileInformation NewUser
{
get { return System.Web.HttpContext.Current.Profile as ProfileInformation; }
}

}
}

这是 UserProfile 获取方法:
[Authorize]
public ActionResult UserProfile()
{
string id = User.Identity.Name.ToString();
MembershipUser user = Membership.GetUser(id);

var model = new UserViewModel();

UserInformation userInf = new UserInformation();
userInf.Username = user.UserName;
userInf.Email = user.Email;

ProfileInformation currentProfile = ProfileInformation.GetProfile(user.UserName);

model.Profile = currentProfile;
model.UserInf = userInf;

return View(model);

}

如您所见,我正在使用 View 模型来显示 View 。 View 模型是这样的:
 public class UserViewModel
{

public UserInformation UserInf{ get; set; }
public ProfileInformation Profile { get; set; }


}

最后更新 UserProfile 的 HttpPost 方法是:
[Authorize]
[HttpPost]
public ActionResult UserProfile(UserViewModel model)
{
ProfileInformation currentProfile = ProfileInformation.GetProfile(User.Identity.Name.ToString());

ProfileInformation.CurrentUser.FirstName = model.Profile.FirstName;
currentProfile.LastName = model.Profile.LastName;
currentProfile.Street = model.Profile.Street;
currentProfile.Street2 = model.Profile.Street2;
currentProfile.City = model.Profile.City;
currentProfile.State= model.Profile.State;
currentProfile.ZipCode = model.Profile.ZipCode;
currentProfile.PhoneNumber = model.Profile.PhoneNumber;
currentProfile.Save();

MembershipUser user = Membership.GetUser(User.Identity.Name.ToString());
user.Email = model.UserInf.Email;
Membership.UpdateUser(user);


TempData["SuccessMessage"] = "Your Profile information has been saved";
ViewBag.Title = "My Profile";
return RedirectToAction("ProfileUpdated");
}

问题是我无法弄清楚错误来自哪里。该表单呈现我输入的有效信息,然后我被告知“未找到设置属性 'FirstName'。”就像 UserViewModel 正在尝试更新 ProfileInformation.cs(自定义配置文件对象),但它说它找不到对象......我想这是因为它没有要更新的配置文件......但我在它发布之前无法找到错误......太令人沮丧了!任何帮助将不胜感激!!!感谢您抽出时间来检查这一点。

我还将留给您我的 Register 方法,该方法成功使用自定义 Profile 对象,甚至将 name 属性更新为“ScoobyDoo”以进行测试:)
[HttpPost]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
MembershipCreateStatus createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email, model.SecretQuestion, model.SecretAnswer);

if (createStatus == MembershipCreateStatus.Success)
{

FormsService.SignIn(model.UserName, false /* createPersistentCookie */);
Roles.AddUserToRole(model.UserName, "Student");
ProfileInformation.NewUser.Initialize(model.UserName, true);
ProfileInformation.NewUser.Save();

string currentSemesterID = CurrentSemester;
ProfileInformation profile = ProfileInformation.GetProfile(model.UserName);
profile.SemesterID = currentSemesterID;
profile.FirstName = "ScoobyDoo";

return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus));
}
}

// If we got this far, something failed, redisplay form
ViewBag.PasswordLength = MembershipService.MinPasswordLength;
return View(model);
}

最佳答案

您可能需要提供您自己的配置文件实现...如果您已经这样做了,您是否已将您的自定义提供程序类型添加到您的“web.config”中?

例子:

<profile defaultProvider="TableProfileProvider" enabled="true" inherits="YourNamespace.YourClass, YourNamespace">

伟大的 MSDN 文章 here , here , 和 here .

我希望这些能让你上路!

关于asp.net-mvc - 配置文件对象 + View 模型 + 更新用户配置文件 MVC C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5130131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com