天天看點

C# 、.NET、ASP.NET MVC積累

2016-10-27

給視圖中的select指派:

控制器:

public ActionResult Add()
    {
        List<SelectListItem> ClassName = new List<SelectListItem>()
        { 
             new SelectListItem(){Text="廣告拍攝", Value="廣告拍攝"}, 
             new SelectListItem(){Text="影視拍攝", Value="影視拍攝"},
             new SelectListItem(){Text="平面拍攝", Value="平面拍攝"}, 
             new SelectListItem(){Text="綜藝節目", Value="綜藝節目"},
        };
        ViewData["ClassName"] = new SelectList(ClassName, "Value", "Text");
        return View();

    }
           

視圖:

<div class="col-sm-10">
          @Html.DropDownListFor(m => model.ClassName, ViewData["ClassName"] as SelectList, new { @class = "form-control", placeholder = "請輸入分類名稱" })
     </div>
           

2016-11-23

用mvcpager過程中的一個錯誤,相信也是很多初用mvcpager開發者會掉下去的坑:

錯誤提示:

The model item passed into the dictionary is of type 'NetCms.Model.CollectModel', but this dictionary requires a model item of type 'Webdiyer.WebControls.Mvc.PagedList`1[NetCms.Model.CollectModel]'.
           
C# 、.NET、ASP.NET MVC積累

直白點的說就是控制器傳遞給視圖的實體類的資料類型不是視圖中所規定的類型。

詳細解釋:

我的model層的代碼:
           
C# 、.NET、ASP.NET MVC積累
我的controller中的代碼:
           
C# 、.NET、ASP.NET MVC積累
我的view中的代碼:
           
C# 、.NET、ASP.NET MVC積累
乍一看似乎沒有問題,和普通的mvcpager唯一不同的就是PagedList的資料類型是将多個實體類作為了一個大實體類的屬性。但是真正調試一下你就會發現在控制器中return view(model)中的model 的資料類型是CollectModel,而視圖中所規定的資料類型是pagedlist<CollectModel>,相信這個問題有點經驗的老開發人員不用調試就可以看出來。

這個地方改正的做法是将視圖中的@model PagedList<NetCms.Model.CollectModel> 改為@model NetCms.Model.CollectModel

一般mvcpager在做單表的分頁的時候,控制器中是這樣的:
           
C# 、.NET、ASP.NET MVC積累
視圖中是這樣的:
           
C# 、.NET、ASP.NET MVC積累
在這裡,仔細想一下,其實在控制器中return(list_model)中的list_model的資料類型是pagedlist<WebFocus>,和在視圖中@model PagedList<NetCms.Model.WebFocus>引用的資料類型是一樣的!!!

感覺C#中的面向對象的思想還沒有深入骨髓中。
           

2017-01-18

ASP.Net中的ajax.beginform:

Html:

<section class="content">
    @using (Ajax.BeginForm("insertstore", "StoreMS", new AjaxOptions { HttpMethod = "Post", OnBegin = "FormBeginAddstore", OnSuccess = "FormSuccessAddstore" }))
    {

    <p>
    BranchID:<input type="text" id="branchid" name="branchid" />
    </p>
    <p>
                倉庫名稱:<input type="text" id="name" name="name" />
            </p>
            <p>
                倉庫位址:<input type="text" id="address" name="address" />
            </p>
            <p>
                省:<input type="text" id="province" name="province" />
            </p>
            <p>
                市:<input type="text" id="city" name="city" />
            </p>
            <p>
                鎮(區):<input type="text" id="town" name="town" />
            </p>
            <p>
                村:<input type="text" id="vilige" name="vilige" />
            </p>
            <p>
                <input type="submit" value="保  存" />
            </p>
        }
    </section>

           

JS:

function FormBeginAddstore() {
  
}


function FormSuccessAddstore() {

}

           

所需腳本:

<script src="~/Scripts/jquery-1.10.2.min.js"></script>    
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>    
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>

           

2017-01-19

Linq多表查詢的結果轉換成List泛型,在視圖中周遊。

/// <summary>
        /// 庫存清單資訊
        /// </summary>
        /// <returns></returns>
        public ActionResult GetStockListData()
        {
            var data = (from gitem in lde.Goods
                        join bitem in lde.Brand on gitem.BrandId equals bitem.Id
                        join titem in lde.GoodsType on gitem.TypeId equals titem.ID
                        join gsitem in lde.GoodsStore on gitem.ID equals gsitem.GoodsId
                        join sitem in lde.Store on gsitem.StoreId equals sitem.ID
                        select new
                        {
                            goodsid = gitem.ID,
                            goodsbrand = bitem.Name,
                            goodstype = titem.TypeName,
                            goodsname = gitem.DisplayName,
                            goodsunit = gitem.Unit,
                            goodspackage = gitem.Package,
                            goodsprice = gitem.Price,
                            goodsimg = gitem.HomeImage,
                            goodsstore = sitem.Name,
                            storebranchid = sitem.BranchId,
                            goodsstock = gsitem.Num
                        }
                           ).Take(100).ToList();

            List<dynamic> oneList = new List<dynamic>();
            foreach (var item in data)
            {
                dynamic dyObject = new ExpandoObject();
                dyObject.goodsid = item.goodsid;
                dyObject.goodsbrand = item.goodsbrand;
                dyObject.goodstype = item.goodstype;
                dyObject.goodsname = item.goodsname;
                dyObject.goodsunit = item.goodsunit;
                dyObject.goodspackage = item.goodspackage;
                dyObject.goodsprice = item.goodsprice;
                dyObject.goodsimg = item.goodsimg;
                dyObject.goodsstore = item.goodsstore;
                dyObject.storebranchid = item.storebranchid;
                dyObject.goodsstock = item.goodsstock;
                oneList.Add(dyObject);
            }
            ViewBag.data = oneList;
            return View();
        }

           

視圖部分的代碼:

<!-- 主要内容 -->
html    <section class="content">
        @foreach (var item in ViewBag.data)
        {
            <p>
                @item.goodsid
            </p>
            <br />
            <p>
                @item.goodsbrand
            </p>
            <br />
            <p>
                @item.goodsname
            </p>
            <br />
        }
    </section>

           
上面的那個方式雖然可以解決問題,但是“資料類型”一直是匿名類型或者虛類型的。下面這個提供了将linq查詢的結果在控制器中轉換為list<model>的方式:
           
/// <summary>
        /// 将linq查詢到的結果轉化為強類型的List泛型集合
        /// </summary>
        /// <returns></returns>
        public ActionResult GetStrongTypingFromLinq()
        {           
            List<StockListModel> data = (List<StockListModel>)(from gitem in lde.Goods
                                                               join bitem in lde.Brand on gitem.BrandId equals bitem.Id
                                                               join titem in lde.GoodsType on gitem.TypeId equals titem.ID
                                                               join gsitem in lde.GoodsStore on gitem.ID equals gsitem.GoodsId
                                                               join sitem in lde.Store on gsitem.StoreId equals sitem.ID
                                                               select new StockListModel()
                                                               {
                                                                   GoodsId = gitem.ID,
                                                                   GoodsBrand = bitem.Name,
                                                                   GoodsType = titem.TypeName,
                                                                   GoodsName = gitem.DisplayName,
                                                                   GoodsUnit = gitem.Unit,
                                                                   GoodsPackage = gitem.Package,
                                                                   GoodsPrice = gitem.Price,
                                                                   GoodsImg = gitem.HomeImage,
                                                                   GoodsStore = sitem.Name,
                                                                   StoreBranchId = sitem.BranchId,
                                                                   GoodsStock = gsitem.Num
                                                               }
                          ).Take(100).OrderByDescending(c => c.GoodsId).ToList();
            foreach (var item in data)
            {
                var theitem = item;
            }
            return View(data);
        }

           

2017-02-14

在使用EntityFramework(EF)的時候遇到的一個問題:從資料庫生成C#的實體模型,但是後來資料庫結構和表結構改動了,是以删除了之前的實體模型,然後重新添加了一個實體模型(這裡我知道可以用T4模闆來完成這個事情,包括EF中的實作也是用的T4的原理,

但是T4模闆一直沒去研究,不知道怎麼玩=_=*)。但是在編譯後報錯“錯誤 102 參數 2: 無法從“System.Data.Objects.ObjectParameter”轉換為“System.Data.Entity.Core.Objects.ObjectParameter”

C# 、.NET、ASP.NET MVC積累

解決辦法是将“LeadingDebuggerModel.Context.cs”檔案中“using System.Data.Objects;”改成“ using System.Data.Entity.Core.Objects;”

C# 、.NET、ASP.NET MVC積累
C# 、.NET、ASP.NET MVC積累
C# 、.NET、ASP.NET MVC積累

原理:EF5和EF5之前的版本引用的是using System.Data.Objects,EF6開始引用的是using System.Data.Entity.Core.Objects;。報這個錯誤,一般是EF5和EF6共存才會有的錯誤。

2017-05-03

C#中的var 和 object 和 dynamic:

var:隐式類型、虛類型 object:弱類型 dynamic:動态類型

var變量和object類型變量完全不同,使用object類型聲明的變量是弱類型,可以被賦予任何類型的值,而使用var關鍵字聲明的變量與普通變量一樣,仍然是強類型變量。var變量被初始化是,其類型即被确定。

var變量與dynamic變量完全不同。var變量是一種靜态類型的變量,而dynamic是一種動态類型的變量。靜态類型可以執行類型檢查、給出智能提示,而動态類型則不可以。

2018-05-31

C#中的string數組轉int數組

int[] idsArray = Array.ConvertAll<string, int>(strArray, delegate(string s) { return int.Parse(s); });           

郵箱:[email protected]

技術交流QQ群:1158377441