Asp.net

SqlFunctions.StringConvert 添加了不必要的填充

  • June 4, 2018

在我的 ViewModel 中,我返回以下下拉列表:

public IEnumerable<SelectListItem> Statuses
   {
       get
       {
           using (var context = new AssetManager.Models.AssetManagerEntities())
           {
               var query = from status in context.AssetStatuses
                           where status.Reserved != true
                           select new SelectListItem()
                                      {
                                          Value = SqlFunctions.StringConvert((double)status.Id),
                                          Text = status.Name,
                                          Selected = false
                                      };

               return query.ToList();
           }
       }
   }

然後在我看來,它有點像這樣:

@Html.DropDownListFor(model => model.Status, (IEnumerable<SelectListItem>)Model.Statuses)

這一切正常,除了 SqlFunctions.StringConvert,預設情況下使字元串的長度為 10,所以我最終在 html 中得到了這個:

<option value="         7">Free to loan</option>

記下值欄位中的間距。這是一個問題,因為我的 ViewModel 要求這個欄位是 int。

我可以簡單地指定長度參數,但這不是動態的。

有沒有人看到這個問題,或者有解決方案?

謝謝,尼克

更新

下面蒂姆的回答是比這個更好的解決方案,但我無法刪除接受的答案,並且 OP 沒有回應我接受他的回答的請求。

原始答案

最簡單的方法可能是將轉換工作解除安裝到您的伺服器上,而不是數據上下文。如果您將數據層與表示層分開,這將自動發生。但為簡單起見,我將堅持使用您目前的架構:

           var query = from status in context.AssetStatuses
                       where !status.Reserved
                       select new 
                                  {
                                      status.Id,
                                      status.Name
                                  };
           return query.AsEnumerable()
               .Select(status => new SelectListItem
                                  {
                                      Value = status.Id.ToString(),
                                      Text = status.Name,
                                      Selected = false
                                  })
               .ToList();

將其更改為:

Value = SqlFunctions.StringConvert((double)status.Id).Trim(), 

引用自:https://stackoverflow.com/questions/6158706