I've also created a register form that just has a @Html.EditorFor(x => Model)
In the page where I call
@Html.Action("RenderForm", "CustomerMembership") I just get the very generic error
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 7: <h1>@Model.Value("title")</h1>
Line 8:
Line 9: @Html.Action("RegisterForm", "CustomerMembership");
Custom Surface Controller:
using System;
using System.Web.Mvc;
using System.Web.Security;
using Umbraco.Core;
using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence;
using Umbraco.Core.Services;
using Umbraco.Web.Mvc;
using Umbraco.Web.Models;
public class CustomerMembershipController : SurfaceController
{
public CustomerMembershipController()
{
}
[HttpPost]
[ValidateAntiForgeryToken]
[ValidateUmbracoFormRouteString]
public ActionResult Register([Bind(Prefix = "registerModel")] RegisterModel model)
{
if (ModelState.IsValid == false)
{
return CurrentUmbracoPage();
}
// U4-10762 Server error with "Register Member" snippet (Cannot save member with empty name)
// If name field is empty, add the email address instead
if (string.IsNullOrEmpty(model.Name) && string.IsNullOrEmpty(model.Email) == false)
{
model.Name = model.Email;
}
//var test = model.IsValidated;
MembershipCreateStatus status;
var member = Members.RegisterMember(model, out status, model.LoginOnSuccess);
switch (status)
{
case MembershipCreateStatus.Success:
TempData["FormSuccess"] = true;
//if there is a specified path to redirect to then use it
if (model.RedirectUrl.IsNullOrWhiteSpace() == false)
{
return Redirect(model.RedirectUrl);
}
//redirect to current page by default
return RedirectToCurrentUmbracoPage();
case MembershipCreateStatus.InvalidUserName:
ModelState.AddModelError((model.UsernameIsEmail || model.Username == null)
? "registerModel.Email"
: "registerModel.Username",
"Username is not valid");
break;
case MembershipCreateStatus.InvalidPassword:
ModelState.AddModelError("registerModel.Password", "The password is not strong enough");
break;
case MembershipCreateStatus.InvalidQuestion:
case MembershipCreateStatus.InvalidAnswer:
// TODO: Support q/a http://issues.umbraco.org/issue/U4-3213
throw new NotImplementedException(status.ToString());
case MembershipCreateStatus.InvalidEmail:
ModelState.AddModelError("registerModel.Email", "Email is invalid");
break;
case MembershipCreateStatus.DuplicateUserName:
ModelState.AddModelError((model.UsernameIsEmail || model.Username == null)
? "registerModel.Email"
: "registerModel.Username",
"A member with this username already exists.");
break;
case MembershipCreateStatus.DuplicateEmail:
ModelState.AddModelError("registerModel.Email", "A member with this e-mail address already exists");
break;
case MembershipCreateStatus.UserRejected:
case MembershipCreateStatus.InvalidProviderUserKey:
case MembershipCreateStatus.DuplicateProviderUserKey:
case MembershipCreateStatus.ProviderError:
//don't add a field level error, just model level
ModelState.AddModelError("registerModel", "An error occurred creating the member: " + status);
break;
default:
throw new ArgumentOutOfRangeException();
}
return CurrentUmbracoPage();
}
[ChildActionOnly]
public ActionResult ShowCommentForm()
{
return PartialView("RegisterForm");
}
}
Html Action error Object reference not set to an instance of an object
Hi All, I'm trying to use a custom umbRegisterMemberController SurfaceController, which I've firstly just copied from the Umbraco source code and added a Child Action to. Having followed this guide https://our.umbraco.com/Documentation/Reference/Templating/Mvc/Forms/tutorial-child-action
I've also created a register form that just has a @Html.EditorFor(x => Model)
In the page where I call @Html.Action("RenderForm", "CustomerMembership") I just get the very generic error
Custom Surface Controller:
RegisterForm.cshtml:
Register.cshtml
Hi Rowan
Shouldn't your action be
@Html.Action("ShowCommentForm", "CustomerMembership");
Cheers
Nigel
Hi Nigel, Yeah cheers for that spot. I changed that method to ShowRegisterForm, and still have the same issue. Thanks, Rowan
Hi Rowan
Maybe try changing the ShowCommentForm method in your controller to the following:
The partial view is expecting a model, but your action isn't sending one, think this might solve.
Cheers
Nigel
is working on a reply...