Implementing Custom Profile Provider in ASP.NET MVC

前端 未结 2 496
刺人心
刺人心 2020-12-09 13:46

I tried a lot on implementing a custom profile provider in ASP.NET MVC. I\'ve read lots and lots of tutorials, but I can\'t find where my problem is. It\'s pretty similar to

相关标签:
2条回答
  • 2020-12-09 14:00

    The most likely cause is that

    myCommand.Parameters.AddWithValue("@FirstName", (string)context["FirstName"]);
    

    (string)context["FirstName"] is a null value. Even if you pass in a parameter to a sproc, if the value is null on a required parameter, then you will see this error. SQL Server (effectively) does not differentiate between a parameter not passed, and one passed with a null value.

    You're seeing a SQL error. This is unrelated to MVC and MVC isn't really causing your problem. Determine if null is a valid value context["FirstName"], and if so, change your function to accept null values. If not, find out why context["FirstName"] is null.

    Also, I don't think this line is going to add your parameter names correctly (with the "@" prefix).

    myCommand.Parameters.AddWithValue(value.Name, value.PropertyValue);

    Also, since this is MVC, make sure you have a control named FirstName on the form posting to:

    public ActionResult CreateProfile(string Username, string Password, string FirstName, string LastName)
    

    It reads fields based on the name, not the ID

    0 讨论(0)
  • 2020-12-09 14:12

    Yeah, it's because I'm using a class for my properties, ProfileCommon that inherits from ProfileBase.

    public class ProfileCommon : ProfileBase
    {
    public virtual string Label
    {
        get
        {
            return ((string)(this.GetPropertyValue("Label")));
        }
        set
        {
            this.SetPropertyValue("Label", value);
        }
    }
    
    public virtual string FirstName
    {
        get
        {
            return ((string)(this.GetPropertyValue("FirstName")));
        }
        set
        {
            this.SetPropertyValue("FirstName", value);
        }
    }
    
    public virtual string LastName
    {
        get
        {
            return ((string)(this.GetPropertyValue("LastName")));
        }
        set
        {
            this.SetPropertyValue("LastName", value);
        }
    }
    
    public virtual ProfileCommon GetProfile(string username)
    {
        return Create(username) as ProfileCommon;
    }
    }
    

    You can see that I'm using this class in the Web.Config file:

    <profile enabled="true"
         automaticSaveEnabled="false"
         defaultProvider="UserProfileProvider"
         inherits="Test.Models.ProfileCommon">
    [...]
    

    And with ASP.Net MVC, if I wrote my properties in Web.Config, I cannot access them using Profile.PropertyName anymore. Maybe there's a way, but I don't find any examples.

    0 讨论(0)
提交回复
热议问题