0

我正在一個ASP.NET MVC(EF6)數據庫的第一個項目,我有一個自動生成的部分類在我的Models文件夾是這樣的:如何在自動生成的部分類中的iputs的視圖的iputs設置屬性的值MVC

public partial class StdModel 
{ 
    public string StdName { get; set; } 
    public int StdNr { get; set; } 
} 

因爲這是一個自動生成的類,每次我刷新我的模型(無論何種原因)這一類所做的任何更改被刪除的時間,所以我已經擴展這個類,我想以便將從View傳遞給此新分部類中的某些屬性(實體)的一些輸入值(例如,刪除單詞之間的空格)。

查看:

<div class="form-group"> 
     @Html.LabelFor(model => model.StdName , htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.StdName , new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.StdName , "", new { @class = "text-danger" }) 
     </div> 
</div> 

但是因爲它是一個局部類我不能在這個新的部分類聲明相同的特性,我已經嘗試過不同的方法通過構造等,並設置屬性以初始化實現這一目標可是沒有成功,有沒有什麼辦法,如果需要它去之前,DB這樣設置屬性和更改:提前

public partial class StdModel <--- PartialClasses.cs 
{ 
    private string stdName; 
    public string StdName 
    { 
     get { return stdName; } 
     set { stdName = value.ToUpper(); } 
    } 
    private int stdNr; 
    public int StdNr 
    { 
     get { return stdNr; } 
     set {stdNr = Regex.Replace(value, @"\s+", ""); } 
    } 
} 

感謝。

回答

0

一個可能的,潛在可接受的解決方法可能是明確實現一個接口。例如:

using System; 
using System.Text.RegularExpressions; 

namespace StackOverflow_AutoPartialPropOverriding 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      IStdModel model = new StdModel(); 
      Console.WriteLine($"StdName: {model.StdName}"); 
      Console.WriteLine($"StdNr: {model.StdNr}"); 
      /* StdName: steve 
      * StdNr: 1 
      */ 
      Console.ReadKey(); 
     } 
    } 

    public partial class StdModel 
    { 
     public string StdName { get; set; } 
     public int StdNr { get; set; } 
    } 

    public interface IStdModel 
    { 
     string StdName { get; set; } 
     int StdNr { get; set; } 
    } 

    public partial class StdModel : IStdModel 
    { 
     private string stdName = "steve"; 
     string IStdModel.StdName 
     { 
      get => stdName; 
      set => value.ToUpper(); 
     } 

     private int stdNr = 1; 
     int IStdModel.StdNr 
     { 
      get => stdNr; 
      set => stdNr = value; //value is already type int--not sure why you used regex 
     } 
    } 
} 

注:提供下C#7被編譯

+0

正如我所提到的,我在MVC環境中使用它,所以我的看起來像這樣: @ Html.EditorFor(model => model.StdName,new {htmlAttributes = new {@class =「form-control」 }}) – H35am

0

設置一個屬性應該是一個非常簡單的操作被廣泛接受。在setter中更改值會使屬性返回意外的值。你仍然可以做到這一點 - 除了部分課堂問題 - 如果你認爲這是不可避免的,但請注意,在實現對象時,EF也會使用setter。如果數據庫中存在異常值,您將不會注意到!

考慮到所有這些帳戶餘要麼創建的值轉換爲對應的屬性,例如,兩個代表屬性:

public string StdNameSetToUpper 
{ 
    get { return StdName; } 
    set { StdName = value.ToUpper(); } 
} 

...或(優選地)以期模型的工作,傳輸UI和數據層之間的轉換值。

+0

這樣我必須在View的不同部分進行更改,而不是模型中的一個屬性。無論如何,我認爲我需要重新評估我的選擇並採取不同的方法。謝謝你的回答。 – H35am

相關問題