समस्या: मैंने जोएल here द्वारा वर्णित एक कस्टम प्रोफ़ाइल ऑब्जेक्ट बनाया है। मैंने फिर जेरेमी की विधि (here) का उपयोग कस्टम प्रोफ़ाइल का विस्तार करने के लिए किया ताकि मुझे उपयोगकर्ता उत्पन्न करने और उन मानों को सेट करने की अनुमति दी जा सके। इसके बाद मैंने मेमबरशिप जानकारी और प्रोफाइल जानकारी प्रदर्शित करने के लिए व्यूमोडेल बनाया ताकि उपयोगकर्ता अपनी सदस्यता जानकारी (ईमेल) और प्रोफाइल जानकारी अपडेट कर सके। ** दृश्य क्षेत्रों मैं ध्यान में रखते हुए अद्यतन जानकारी में दर्ज करें और बचाने के लिए क्लिक करें, जहाँ मैं निम्नलिखित त्रुटि मिलती हैप्रोफ़ाइल ऑब्जेक्ट + मॉडल देखें + उपयोगकर्ता प्रोफ़ाइल अपडेट करना एमवीसी सी #
System.Configuration.SettingsPropertyNotFoundException के सभी प्रदर्शित करता है: सेटिंग्स संपत्ति 'प्रथम' नहीं मिला था। **
यहाँ मेरी कस्टम प्रोफ़ाइल ऑब्जेक्ट (मॉडल) है:
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);
}
आप मैं उपयोग कर रहा हूँ देख सकते हैं दृश्य प्रदर्शित करने के लिए एक मॉडल देखें।
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");
}
समस्या मैं समझ नहीं जहां त्रुटि से आ रही है है । फॉर्म में मैं इनपुट जानकारी इनपुट करता हूं और फिर मुझे बताया जाता है कि "सेटिंग प्रॉपर्टी 'फर्स्टनाम' नहीं मिला था।" ऐसा लगता है कि UserViewModel ProfileInformation.cs (कस्टम प्रोफ़ाइल ऑब्जेक्ट) को अपडेट करने का प्रयास कर रहा है लेकिन यह कह रहा है कि यह ऑब्जेक्ट नहीं ढूंढ सकता ... मैं सोच रहा हूं क्योंकि इसमें अपडेट करने के लिए प्रोफ़ाइल नहीं है ... लेकिन मैं पोस्ट करने से पहले त्रुटि में नहीं मिल सकता ... तो निराशाजनक! किसी भी तरह की सहायता का स्वागत किया जाएगा!!! इसे देखने के लिए समय निकालने के लिए धन्यवाद।
मैं अपने रजिस्टर विधि है जो कस्टम प्रोफ़ाइल वस्तु सफलतापूर्वक उपयोग करता है और यहां तक कि के साथ छोड़ देंगे परीक्षण प्रयोजनों :)
[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);
}