Implementing Custom Profile Provider in ASP.NET MVC

99封情书 提交于 2019-11-28 08:46:39
Russell Steen

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

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!