使用 url Action 为标签赋值

Posted

技术标签:

【中文标题】使用 url Action 为标签赋值【英文标题】:Assigning a value to label using 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;
  
            

【问题讨论】:

【参考方案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);

【讨论】:

感谢您的解决方案。小问题,在动作结果中它返回视图。没事吧?因为我遇到了一个错误,当我在调试时遇到它时,它会搜索视图。 我将其更改为返回内容并顺利运行。再次感谢

以上是关于使用 url Action 为标签赋值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Url.Action 中传递区域?

如何使用 Url.Action 在 asp.net core 2.0 razor 页面中传递多个操作

servlet:<url-pattern>*.action</url-pattern>这个标签用于设置访问地址?就是这个文件在电脑里存的位置

DRF框架之自定义action

jsp用 超链接 A标签如何实现页面跳转

表单form action的url写法