【问题标题】:Assigning a value to label using url Action使用 url Action 为标签赋值
【发布时间】:2022-01-16 21:41:37
【问题描述】:

在我的应用程序中,我从 Controller 将值和文本传递给 HTML 视图。

我还想显示另一个额外的字段,所以我想不要为当前代码而苦苦挣扎,而是从 url.Action 方法将该数据获取到标签。

我想知道在 asp.net 中是否可以这样做?

到目前为止,这也是我的代码。需要帮助来完成代码。场景是,如果请求具有先前的结算,我将该数据加载到带有请求名称和请求 ID 的视图中。还需要修改并显示以前的批准人

这是我的 HTML 代码。

<table class="table">
   <tr>
      <th>
         Settling Request Type
      </th>
      <th>
         Request Id
      </th>
      <th>
         Previously Approved By
      </th>
   </tr>
   @foreach (var item in Settlements)
   {
   <tr>
      <td>
         @Html.Label(item.Text.ToString())
      </td>
      <td>
         @Html.Label(item.Value)
         @Html.ActionLink("Click to view", "Details", "AppRequests", new { id = @item.Value }, new { target = "_blank" })
      </td>
      <td>
         <a href="@Url.Action("PreviousTopApprover", "PendingRequestM", new { id = item.Value })"></a>
      </td>
   </tr>
   }
</table>

这是控制器,如果可能的话,我想从这里将 empName 传递给视图并显示它。

public ActionResult PreviousTopApprover(int ?Id)
{
  if (Id !=null)
  {
   var Approver = (from appProcess in db.ApprovalProcess
                   join appParties in db.ApproveParties on appProcess.Id equals appParties.ApprovalProcess_Id
                   join emp in db.CreateEmployee on appParties.Approver_Id equals emp.Id
                   where appProcess.Req_Id == Id && appParties.Approve_Type == true
                   select new { emp.EmpName }).ToList();

       string empName = Approver.First().EmpName;
       return View();
  }
  else
  {
    return null;
  }
            
}

【问题讨论】:

    标签: c# asp.net asp.net-mvc


    【解决方案1】:

    如果您无法在视图模型中包含数据,则需要发出 AJAX / FETCH 请求来加载它。

    例如:

    <td>
        <span data-toggle="fetch" data-url="@Url.Action("PreviousTopApprover", "PendingRequestM", new { id = item.Value })">Loading...</span>
    </td>
    
    <script>
    window.addEventListener('DOMContentLoaded', (event) => {
        document.querySelectorAll("[data-toggle='fetch']").forEach(async (el) => {
            const url = el.dataset.url;
            const response = await fetch(url);
            if (!response.ok) {
                const errorMessage = await response.text();
                console.error(response.status, response.statusText, errorMessage);
                el.innerHTML = "Error loading approver";
                return;
            }
            
            const data = await response.text();
            el.innerHTML = data;
        });
    });
    </script>
    

    您还需要更改您的操作:

    public ActionResult PreviousTopApprover(int ?Id)
    {
        if (Id == null) return HttpNotFound();
        
        var approver = (from appProcess in db.ApprovalProcess
                       join appParties in db.ApproveParties on appProcess.Id equals appParties.ApprovalProcess_Id
                       join emp in db.CreateEmployee on appParties.Approver_Id equals emp.Id
                       where appProcess.Req_Id == Id && appParties.Approve_Type == true
                       select new { emp.EmpName })
                       .FirstOrDefault(); 
    
        if (approver == null) return HttpNotFound();
        
        return Content(approver.EmpName);
    }
    

    【讨论】:

    • 感谢您的解决方案。小问题,在动作结果中它返回视图。没事吧?因为我遇到了一个错误,当我在调试时遇到它时,它会搜索视图。
    • 我将其更改为返回内容并顺利运行。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多