0

ここにコードを入力してください。私のような他の投稿をいくつか読みましたが、まだ回答がありません。

プロファイル情報用のエディターがあり、選択したユーザーのデータは正常に取得されますが、保存しようとすると、次のエラーが発生します。

設定プロパティ '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" );
    }

Display Editor は正常に動作し、データを取得します。Post を試してみると、これが得られます。他のアイデアはありますか?私の唯一の他のアイデアは、Profile モデルではなくパラメーターを分割して Ajax Post を実行し、読み取りと設定を行うことです。/.. 考えはありますか?

4

1 に答える 1

1

プロファイルクラスを使用してフォームを投稿した後、モデルバインダーはモデルをバインドしようとするため、すべてのプロパティ(特に「FirstName」)が必要になります。

問題は、フォームのモデルが完全ではない(そして完全ではない)ため、プロファイルが許可されておらず、不明として機能していることです。

FirstNameプロパティのゲッターの前にブレークポイントを設定すると表示されます。ブレークポイントがヒットしたら、[ローカル]ウィンドウを見て、「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 に答える