Hi everyone,
I am trying to add a custom field on product and show it on product detail page.
So far I did;
1. Went to my database and added a new column named "POL" in Product table.
2. Went to Libraries > Nop.Core > Domain > Catalog > Product.cs and added
]/// <summary>
/// POL
/// </summary>
public virtual string POL { get; set; }
[/code
3. Went to Libraries > Nop.Data > Mapping > Catalog > ProductMap.cs and added
[code]]//POL
this.Property(p => p.POL).HasMaxLength(500).IsOptional();
[/code
4. Went to Presentation > Nop.Admin > Models > Catalog > ProductModel.cs and added
[code]]//POL
[NopResourceDisplayName("Admin.Catalog.Products.Fields.POL")]
[AllowHtml]
public string POL { get; set; }
[/code
5. Went to Presentation > Nop.Admin > Validators > Catalog > ProductValidator.cs and added
[code]//POL
RuleFor(x => x.POL).Length(0, 500);
6. Went to Presentation > Nop.Admin > Models > Settings > ProductEditorSettingsModel.cs and added
//POL
[NopResourceDisplayName("Admin.Configuration.Settings.ProductEditor.POL")]
public bool POL { get; set; }
7. Went to Presentation > Nop.Admin > Views > Product > _CreateOrUpdate.Info.cshtml and added
@*POL*@
<div class="form-group @(Model.ProductEditorSettingsModel.POL ? null : "advanced-setting")">
<div class="col-md-3">
@Html.NopLabelFor(model => model.POL)
</div>
<div class="col-md-9">
@Html.EditorFor(model => model.POL)
@Html.ValidationMessageFor(model => model.POL)
</div>
</div>
8. Went to Presentation > Nop.Admin > Controllers > ProductController.cs and added
to Method: void PrepareProductModel(ProductModel Model,product..)
//POL
model.POL = product.POL;
to Method: Create(ProductModel model, bool continueEditing)
//POL
product.POL = model.POL;
to Method: Edit(ProductModel model, bool continueEditing)
//POL
product.POL = model.POL;
9. Went to Presentation > Nop.Web > Models > Catalog > ProductDetails.Model.cs and added
//POL
public string POL { get; set; }
10. And finally on Presentation > Nop.Web > Views > Product > ProductTemplate.Simple.cshtml added
<!--POL-->
@if (!String.IsNullOrEmpty(Model.POL))
{
@Html.Raw(Model.POL)
}
When I go to Administration > Catalog > Products and click on "Add New";
First I get an error on VS saying for Presentation > Nop.Admin > Controllers > ProductController.cs Module: Process: "The source file is different from when the module was built. Would you like the debugger to use it anyway"
Then when I click on Yes;
I get a Null Reference Exception on ProductController.cs on
throw new ArgumentNullException("model");
When I click continue it gives me following server error;
Server Error in '/' Application.
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 606: {
Line 607: if (model == null)
Line 608: throw new ArgumentNullException("model");
Line 609:
Line 610: if (product != null)
Source File: C:\Users\Bulut\Source\Workspaces\Unfreighted\nopCommerce_3.80_Source\Presentation\Nop.Web\Administration\Controllers\ProductController.cs Line: 608
Stack Trace:
[NullReferenceException: Object reference not set to an instance of an object.]
Nop.Admin.Controllers.ProductController.PrepareProductModel(ProductModel model, Product product, Boolean setPredefinedValues, Boolean excludeProperties) in C:\Users\Bulut\Source\Workspaces\Unfreighted\nopCommerce_3.80_Source\Presentation\Nop.Web\Administration\Controllers\ProductController.cs:608
Nop.Admin.Controllers.ProductController.Create() in C:\Users\Bulut\Source\Workspaces\Unfreighted\nopCommerce_3.80_Source\Presentation\Nop.Web\Administration\Controllers\ProductController.cs:1087
lambda_method(Closure , ControllerBase , Object[] ) +61
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +157
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +22
System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +29
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +32
System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +50
System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +225
System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +225
System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +225
System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +225
System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +225
System.Web.Mvc.Async.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +34
System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +26
System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +100
System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27
System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +36
System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +22
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9765121
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.6.1586.0
Any idea how to fix it? I know it is coming from the following change but have no idea how to fix it.
8. Went to Presentation > Nop.Admin > Controllers > ProductController.cs and added
to Method: void PrepareProductModel(ProductModel Model,product..)
//POL
model.POL = product.POL;