在Asp.Net Core MVC 開發過程中遇到的問題


1. Q: Razor視圖中怎么添加全局模型驗證消息

A:使用ModelOnly

<div asp-validation-summary="ModelOnly" class="text-danger"></div>

2.Q:樹形表格,使用的是bootstrap-table+jquery.treegrid

A:

效果

參考的代碼,某些地方添加了注釋

<link href="https://cdnjs.cloudflare.com/ajax/libs/jquery-treegrid/0.2.0/css/jquery.treegrid.min.css" rel="stylesheet">
<link href="https://unpkg.com/bootstrap-table@1.15.5/dist/bootstrap-table.min.css" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-treegrid/0.2.0/js/jquery.treegrid.min.js"></script>
<script src="https://unpkg.com/bootstrap-table@1.15.5/dist/bootstrap-table.min.js"></script>
<script src="https://unpkg.com/bootstrap-table@1.15.5/dist/extensions/treegrid/bootstrap-table-treegrid.min.js"></script>
<table id="table"></table>
<script>
  var $table = $('#table')
  $(function() {
    $table.bootstrapTable({
      url: 'json/treegrid.json',
      striped: true,
      sidePagination: 'server',
      idField: 'id',
      showColumns: true,
      columns: [
        {
          field: 'ck',
          checkbox: true
        },
        {
          field: 'name',
          title: '名稱'
        },
        {
          field: 'status',
          title: '狀態',
          sortable: true,
          align: 'center',
          formatter: 'statusFormatter'
        },
        {
          field: 'permissionValue',
          title: '權限值'
        }
      ],
      treeShowField: 'name',//注意
      parentIdField: 'pid',//注意
      onPostBody: function() {
        var columns = $table.bootstrapTable('getOptions').columns

        if (columns && columns[0][1].visible) {
          $table.treegrid({
            treeColumn: 1,
            onChange: function() {
              $table.bootstrapTable('resetWidth')
            }
          })
        }
      }
    })
  })
  
  function statusFormatter(value, row, index) {
    if (value === 1) {
      return '<span class="label label-success">正常</span>'
    }
    return '<span class="label label-default">鎖定</span>'
  }
</script>

給復選框添加選擇的點擊功能,在一個表格中選中一行時,加載與此行有關的數據信息。其他的相關js的引用請自行添加

$RoleTable.on('check.bs.table uncheck.bs.table ' +
    'check-all.bs.table uncheck-all.bs.table',
    function () {
        $('#RoleToNavi').prop('disabled', !$RoleTable.bootstrapTable('getSelections').length);
        $.map($RoleTable.bootstrapTable('getSelections'),
            function (row) {
               roleId = row.Id;
               $RoleNavigationTable.bootstrapTable('destroy');//銷毀                    
               $RoleNavigationTable.bootstrapTable({//重新加載                                                
            });
       });
 });

3.Q:Razor中定義函數~~~~

A:使用@function

4.Q:EFCore中怎么設定decimal的精度,如果不設置精度的話,默認生成數據庫(MariaDB)中默認精度是(65,30)

A:設置固定精度問題,示例代碼如下

public class MyProjectContext : DbContext
{
   public DbSet<order> Orders { get; set; }

   rotected override void OnModelCreating(DbModelBuilder modelBuilder)
   {
      base.OnModelCreating(modelBuilder);
      modelBuilder.Entity<order>(b =&gt;
      {
       //配置訂單的金額浮點數精度為decimal(18,6)
          b.Property(p =&gt; p.Amount).HasColumnType("decimal(18,6)");
      });   
  }   
}

5.Q:WPF問題:mvvm模式下,怎么讓點擊按鈕關閉窗口

A: 使用帶參數的Command進行實現,具體代碼如下:

//command定義
public ICommand CancelCommand { get; set; }

// CancelCommand實現
CancelCommand = new RelayCommand<window>((window)=&gt;
{
    window.Close();
});

xaml:代碼
<window x:class="MvvmCloseWindowApp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:MvvmCloseWindowApp" mc:ignorable="d" name="MWindow" title="MainWindow" height="350" width="525">
    <grid>
        <button content="Close Window" width="100" height="25" command="{Binding CancelCommand}" commandparameter="{Binding ElementName=MWindow}">
    

            

6.Q:asp.net core mvc 將ViewBag中的數據在js中調用/在razor頁面中的js代碼調用razor變量

A:假設Action傳遞到Razor View頁面一個參數:ViewBag.Title,在JS中使用這個數據的話需要這樣用'@ViewBag.Title',就是在@ViewBag.Title兩邊加上引號,使用單引號或雙引號,這兩個都可以

可以使用 @param,對於要獲取的字符串,需要加引號,如'@param,最好都加上引號,因為你不知道js引用后到底是什么類型的數據

7.Q:使用了Nigix代理后,在使用wpf客戶端post方法提交數據時,出現如下錯誤:


<title>413 request Entity Too Large</title>

<center><h1>413 Request Entity Too Large</h1></center>
<hr><center>nginx/1.10.3</center>


A:在nigix的配置文件中http{}內添加如下內容:

#設置允許發布內容為8M
client_max_body_size 8M;
client_body_buffer_size 128k;

針對post
針對post請求解決辦法: 
修改nginx.conf里面的幾個相關的配置參數 
client_body_buffer_size 10m(配置請求體緩存區大小, 不配的話) 
client_max_body_size 20m(設置客戶端請求體最大值) 
client_body_temp_path /data/temp (設置臨時文件存放路徑。只有當上傳的請求體超出緩存區大小時,才會寫到臨時文件中,注意臨時路徑要有寫入權限) 
如果上傳文件大小超過client_max_body_size時,會報413 entity too large的錯誤。 
針對get
針對get請求,我們可以通過修改另外兩個配置來解決請求串超長的問題: ~~~~
client_header_buffer_size 語法:client_header_buffer_size size 默認值:1k 使用字段:http, server 這個指令指定客戶端請求的http頭部緩沖區大小絕大多數情況下一個頭部請求的大小不會大於1k不過如果有 來自於wap客戶端的較大的cookie它可能會大於1k,Nginx將分配給它一個更大的緩沖區,這個值可以在 large_client_header_buffers里面設置。 large_client_header_buffers 語法:large_client_header_buffers number size 默認值:large_client_header_buffers 4 4k/8k 使用字段:http, server 指令指定客戶端請求的一些比較大的頭文件到緩沖區的最大值,如果一個請求的URI大小超過這個值,服務 器將返回一個"Request URI too large" (414),同樣,如果一個請求的頭部字段大於這個值,服務器 將返回"Bad request" (400)。 緩沖區根據需求的不同是分開的。 默認一個緩沖區大小為操作系統中分頁文件大小,通常是4k或8k,如果一個連接請求將狀態轉換為 keep-alive,這個緩沖區將被釋放。
為什么修改http header的大小就能解決get請求串過長的問題?因為get請求參數會拼在http header中,所以,修改了http header的大小,就能解決上面問題。

8.Q:使用layx彈窗時,如果給父頁面傳遞數據

A:請看例子,示例是在layer例子中看到的

父頁面的js代碼,其中父頁面中包含一個名為IconInput

<script type="text/javascript">
    $('#IconBtn').on('click',//綁定IconBtn按鈕的點擊事件,彈出layx窗口
        function () {
            layx.iframe('icon', '請選擇圖標', '/Icon/FontAwesomeIcon');//加載一個圖標選擇頁面
            return false;//放在提交數據
        });
</script>

FontAwesomeIcon頁面中使用js代碼,使用parent可以獲取父頁面上的屬性值並給它們賦值

$('#IconSaveBtn').on('click',//綁定IconSaveBtn按鈕的點擊事件,將選擇的數據傳到到父窗口
   function () {
      parent.$('#Icon').val($pickIcon.attr('class'));
      parent.layx.destroy('icon');
   });

如果可以,需要你的一個關注!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM