0

I get an error

Object reference not set to an instance of an object.

when I call my API that returns a view page. Without data passing to razor page everything is ok but I get error when I pass data to it.

This is my API:

public async Task<IActionResult> GetRazorPageHtml()
{
    var viewPath = "/Template/Pages/paymentGateway.cshtml";

    var viewResult = _razorViewEngine.GetView(viewPath, viewPath, false);
    if (!viewResult.Success)
    {
        return NotFound();
    }

    var model = new PaymentGatewayModel
    {
        PaymentMethod = "Credit Card",
        Amount = 100.00
    };

    var viewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
    {
        ["PaymentMethod"] = model.PaymentMethod,
        ["Amount"] = model.Amount
    };

    var actionContext = new ActionContext(ControllerContext.HttpContext, ControllerContext.RouteData, ControllerContext.ActionDescriptor);
    var output = new StringWriter();

    var viewContext = new ViewContext(
        actionContext,
        viewResult.View,
        viewData,
        new TempDataDictionary(ControllerContext.HttpContext, _tempDataProvider),
        output, // Use the same StringWriter instance
        new HtmlHelperOptions()
    );

    await viewResult.View.RenderAsync(viewContext);

    return Content(output.ToString(), "text/html");
}

This is my class for pass data of Razor page:

namespace Payment.Service.Presentation.Template.Pages;

public class PaymentGatewayModel
{
    public string PaymentMethod { get; set; }
    public decimal Amount { get; set; }
}

And finally this is my Razor page. When I code in this page autocomplete works after @Model and suggests also Amount for example but I get error

Object reference not set to an instance of an object

What is the problem and how can I fix that?

@page
@model Payment.Service.Presentation.Template.Pages.PaymentGatewayModel
    <h1>Payment Gateway</h1>
    <p>Payment Method: @Model.Amount</p>

and also this my register section in program.cs :

    builder.Services.AddRazorPages(options =>
    {
        // Set the root directory for Razor Pages
        options.RootDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Pages");
    });
marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
S k
  • 39
  • 1
  • 6

0 Answers0