[英]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.