我在我的 Razor 頁面 ASP.NET Core Web 應用程式上設定了身份,并將用戶名設定為 V003950。我的網路應用程式的一些背景故事是您可以上傳/下載檔案,管理員可以上傳和分配用戶,然后用戶登錄并且只能查看他們的檔案。
我試圖與之比較的 id 是一個整數,而 Id 是 3950,所以我試圖做一個這樣的 if 陳述句:
@foreach (var item in Model.Files)
{
if(User.Identity?.Name! == item.VendorId){
if (item.FileType == "Purchase Order")
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Number)
</td>
@*<td>
@Html.DisplayFor(modelItem => item.Date)
</td>
<td>
@Html.DisplayFor(modelItem => item.Value)
</td>*@
@*<td>
@Html.DisplayFor(modelItem => item.FileType)
</td>
<td>
<a asp-page="Upload" asp-route-id="@item.Id">Upload File</a>
</td>*@
<td>
@if (item.Attachment != null)
{
<form asp-page-handler="Download" method="post" asp-route-id="@item.Id">
<input type="submit" class="btn btn-dark" value="Download">
</form>
}
</td>
</tr>
}
}
}
但是因為一個是字串,一個是 int,所以它不起作用。我也嘗試將名稱轉換為 int,但一開始的 V 正在成為一個問題。
有沒有辦法讓我從 if 中洗掉前導 V 或者添加 .contains 代替?
uj5u.com熱心網友回復:
結合評論中提到的想法,我建議將第一個字符從Nameusing String.Substring中洗掉,然后將其轉換為intusing int.TryParse最后將其與 進行比較VendorId,如下所示:
if (int.TryParse(User.Identity?.Name?.Substring(1), out int nameAsInteger) &&
nameAsInteger == item.VendorId)
{
}
// or use AsSpan instead of Substring to impove performance
if (int.TryParse(User.Identity?.Name?.AsSpan(1), out int nameAsInteger) &&
nameAsInteger == item.VendorId)
{
}
跨度:
正如評論中提到的用戶madreflectionSubstring ,在堆上分配一個新string物件并執行提取文本的完整副本。您可以通過呼叫來提高性能AsSpan。
uj5u.com熱心網友回復:
如果您的 UserName 都是 的樣式V some number,那么您可以使用以下代碼:
@foreach (var item in Model.Files)
{
var result = User.Identity?.Name;
if(result!=null){
if(Int32.Parse(result.Substring(1, result.Length - 1)) == item.VendorId){
//.......
}
}
}
uj5u.com熱心網友回復:
嘗試將整數轉換為字串.ToString()
就像 rbdeenk 在他的評論中提到的那樣,您可以使用擺脫您名字中的“V”
.Trim( new Char[] { 'v', 'V' } )
然后比較兩個字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/519460.html
標籤:C#网asp.net 核心if 语句剃刀页面
