簡體   English   中英

如何根據用於確定要顯示的按鈕的值在單擊之前不知道的條件動態顯示按鈕?

[英]How to dynamically show a button based on conditions where the value being used to determine what button to show isn't known until it's clicked?

如果有人有更好的標題,請隨時編輯。 我從一位即將離開公司的開發人員那里繼承了一個項目,我正在努力尋找現有代碼提供的問題的解決方案。

視圖中的代碼:

<div>
            <table class="table">
                <tr>
                    <th class="border-bottom border-top-0">Action</th>
                </tr>
                @foreach (Step actionItem in Model.Steps)
                {
                    @if (actionItem.HasRun == false)
                    {
                        <tr class="border-top-0">
                            <td>
                                @if (actionItem.ReturnsInfo == true)
                                {
                                    <input type="button" value="Run Check" onclick="loadProcessingFeedbackPartial('@actionItem.StepID', '@Model.Client.DatabaseConnectionString' )" />
                                }
                                else
                                {
                                    <input type="submit" value="Run Check" name="btnRunStoredProcedure" asp-action="CallStepStoredProcedure" asp-route-StepID="@actionItem.StepID" asp-route-StepCompleted="@actionItem.HasRun" />
                                }
                            </td>
                        </tr>
                        break;
                    }
                }
            </table>
        </div>

從按鈕單擊調用 Javascript:

<script type="text/javascript">
    function loadProcessingFeedbackPartial(x, y) {
        var url = '@Url.Action("ViewProcessingFeedBackPartial", "Client")';
        var stepId = x;
        var databaseConnectionString = y;
        $("#processingFeedbackPartialDiv").load(url, { stepId, databaseConnectionString },
            function () {
                $("#confirmButton").removeAttr("style");
            });
    }
</script>

控制器動作:

public IActionResult ViewProcessingFeedBackPartial(int StepId, string DatabaseConnectionString)
    {
        FeedbackDetails feedbackDetails = new FeedbackDetails();

        feedbackDetails.Data = _clientProcessingService.GetProcessingFeedbackDetails(StepId, DatabaseConnectionString);

        return PartialView("_ViewFeedback", feedbackDetails);
    }

視圖中的按鈕有一個 Onclick 事件,該事件轉到 Javascript 函數,該函數使用來自調用服務方法的控制器的數據加載局部視圖。 這就是問題所在。 如果沒有返回行,我想繞過完全繪制的部分。

因此,我稍微更改了控制器操作以包含一個條件,即如果feedbackDetails.Data有 0 行,則只需從服務調用不同的方法,正常處理,但返回視圖而不是部分。

public IActionResult ViewProcessingFeedBackPartial(int StepId, string DatabaseConnectionString, int ClientId)
    {
        FeedbackDetails feedbackDetails = new FeedbackDetails();

        feedbackDetails.Data = _clientProcessingService.GetProcessingFeedbackDetails(StepId, DatabaseConnectionString);
        if(feedbackDetails.Data.Rows.Count == 0)
        {
            _clientProcessingService.RunProcessStepConfirmation(DatabaseConnectionString, StepId, ClientId, "No information returned, automatically proceeding to next step.");
            return RedirectToAction("Processing", new { Id = ClientId });
        }

        return PartialView("_ViewFeedback", feedbackDetails);
    }

這“有效”,除了因為在視圖中它是在加載部分的 Javascript 函數中調用的,否則視圖將在該部分內返回,而不是返回視圖。

但我不確定如何解決這個問題,因為沒有先點擊按鈕並嘗試用數據填充該集合,我不知道它是空的(並跳過部分)還是它有行(並繪制部分)。

我嘗試創建一個返回布爾值的中間控制器操作,並嘗試在 javascript 函數中使用該操作的結果來繪制部分或基於 bool 跳過它,但我並不是最擅長的 Javascript 所以我不是t 能夠讓它工作。

我不確定解決這個問題的方法是否涉及創建顯示多個按鈕的邏輯,這些按鈕路由到不同的控制器操作或 javascript 函數,或者只是通過 Javascript 以某種方式處理它。

什么是解決這個問題的好方法?

@Mkalafut,無論收到的結果如何,您的 jQuery 函數都會將控制器結果直接加載到“#processingFeedbackPartialDiv”中。 最好先把它放到一個變量中,然后添加一些簡單的邏輯來決定下一步做什么。 控制器可能會通過返回一個易於識別的空結果來提供幫助。 例如

$.get("url", { stepId, databaseConnectionString }, function (data) {
    var result = data;
    // Some example conditional logic - adjust as required
    if (result != null){
        $("#processingFeedbackPartialDiv").html(result);
        $("#confirmButton").removeAttr("style");
    }
});

請記住,jQuery 加載和獲取都只是 ajax 的簡寫函數,因此如果需要,您可以進一步自定義代碼以獲得所需的靈活性。 https://api.jquery.com/jQuery.get/ https://api.jquery.com/load/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM