Petar Pan
Petar Pan

Reputation: 23

Navigation to Index view using RedirectToAction does not work (C#)

While debugging the code, I see that the Edit action is performed, but the URL remains unchanged and there is no navigation to the new Index view. I also tried to handle the form submission via JavaScript, but after saving the Java Script code was not executed.

Controller.cs:

[HttpGet("/ZahtevaZaReaktivacijo/[controller]/[action]/{zahtevaId}")]
public async Task<IActionResult> Edit(int zahtevaId)
{
    ZahtevaZaReaktivacijoInfo? zahtevaInfo;

    zahtevaInfo = await _zahtevaService.GetZahtevaZaReaktivacijoInfoById(zahtevaId);


    if (zahtevaInfo == null)
    {
        return NotFound();
    }

    return PartialView("_Index", zahtevaInfo);
}

[HttpPost]
public async Task<IActionResult> Save(ZahtevaZaReaktivacijoInfo zahtevaZaReaktivacijoInfo)
{
    ArgumentNullException.ThrowIfNull(zahtevaZaReaktivacijoInfo);

    if (!ModelState.IsValid)
    {
        return PartialView("_Index", zahtevaZaReaktivacijoInfo);
    }

    try
    {
        int newId = await zahtevaService.NovaZahteva(zahtevaZaReaktivacijoInfo);
        ViewData["NotifySaveSuccessText"] = ResourceUI.UI_Message_Saved; // Sporočimo na UX, da je uspešno shranjeno

        if (newId > 0)
        {
            return RedirectToAction("Edit", new { zahtevaId = newId });
        }
    }
    catch (Exception ex)
    {
        ModelState.AddModelError("ModelException", ExceptionHandler.HandleModelException(ex));
        Log.ForContext(typeof(PodruznicaController)).Error(ex, ex.Message);
    }

    return PartialView("_Index", zahtevaZaReaktivacijoInfo);
}

Index.cshtml:

@model ZahtevaZaReaktivacijoInfo
@{
    string tabContentId = "EditZadeva_" + Model.ZahtevaId;
    string urlFormAction = "Save";
    string urlClose = Url.Content("~/");

    bool isDodajanje = Model.ZahtevaId == 0;
    bool isFormLocked = true;

    string isReadonly = isDodajanje ? "" : "form-lockable-item";
}

<div id="@tabContentId" class=" ">
    <div class="row">   
        <div class="col-12">
            <!-- .card-body -->
            <div class="card-body p-2">

                <form id="@(tabContentId)form"
                      asp-action="@urlFormAction"
                      data-urlclose="@urlClose"
                      method="post"
                      rrc-change-checker="true"
                      class="form-lockable">

                    <input type="hidden" asp-for="EnotaId" />
                    <input type="hidden" asp-for="ZahtevaId" />
                    <input type="hidden" asp-for="SysRowversion" />

                      <div class=" ">
                    <partial name="_ValidationSummaryPartial" model="Model" view-data="ViewData" />
                    </div>

                    <div class="section-block">
                        <div class="h6 text-uppercase">PODATKI O ZAHTEVI ZA REAKTIVACIJO</div>
                        <!-- .card -->
                        <div class="card mx-0">
                            <!-- .card-body -->
                            <div class="card-body p-2 pr-3 col-12 resize-section">
                                <div class="form-group row">
                                    <label asp-for="RazlogZahteveId"
                                           rrc-required-css-class="model-required"
                                           class="control-label col-sm-5">
                                    </label>
                                    <input asp-for="RazlogZahteveId"
                                           class="form-control col-sm-7  @isReadonly"
                                           kendo-type="kendoDropDownList"
                                           kendo-filter="contains"
                                           kendo-api="@Url.Content("~/api/Sifrant/SifrantByVrstaIdDropdownList/" + SifrantVrsta.RazlogZahteveZaReaktivacijo.Id)">
                                </div>
                            </div><!-- /.card-body -->
                        </div><!-- /.card- -->
                    </div><!-- /.section-block- -->

                    <div class="card-divider"></div>

                    <div class="section-block d-flex">
                        @* form buttons *@
                        <button type="submit" class="form-save btn btn-primary ml-auto"><i class="fa-light fa-save fa-lg mr-1"></i> @ResourceUI.UI_Form_Button_Save</button>
                        <button type="button" class="form-close-up1level2parameters btn btn-secondary ml-2"><i class="fa-light fa-arrow-left-to-line fa-lg mr-1"></i> @ResourceUI.UI_Form_Button_Exit</button>
                    </div>
                </form>

            </div> <!-- ./card-bod -->
        </div> <!-- ./card -->
    </div> <!-- ./section-block -->
</div> <!-- ./row tabContentId -->

<script>
    $(document).ready(function () {
        kendoHelper.genericComponents.bind("#@tabContentId");  // bind generic kendo elements
        changeChecker.init("#@tabContentId");                  // bind User notification on form change
        asyncFormHandler.init("#@tabContentId");               // bind Form submit events
        asyncFormHandler.enableOrDisableForm("#@tabContentId", '@(isFormLocked)');

        $('#EditZadeva_3form').closest('.tab-pane').attr('id')
        $('#EditZadeva_3form').closest('.tabs-container').find('a[href="#Zahteva"]')

        showValueChangeAlert.init("#@tabContentId");
    });
</script>

Route config:

// Route configuration
app.MapControllerRoute(
    name: "defaultArea",
    pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

Any suggestions what is wrong?

Upvotes: 0

Views: 94

Answers (0)

Related Questions