![](/img/trans.png)
[英]How to pass value from partial view to shared view _Layout.cshtml in asp.net MVC?
[英]How to set value of a property from iputs of View in auto generated partial class in asp.net MVC
我正在一個ASP.NET MVC(EF6)數據庫第一個項目中工作,並且在Models文件夾中有一個自動生成的局部類,如下所示:
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>
但是,因為它是一個局部類,所以我不能在這個新的局部類中聲明相同的屬性,而且我已經嘗試了不同的方法,例如通過構造函數和帶有初始化器的set屬性來實現此目的,但沒有成功,有沒有辦法設置屬性並在進入數據庫之前按需要進行更改,如下所示:
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+", ""); }
}
}
提前致謝。
一個可能的潛在可接受的解決方法可能是顯式實現接口。 例:
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
}
}
}
筆記:
設置屬性應該是非常簡單的操作,這一點已被廣泛接受。 在setter中更改值會使屬性返回意外值。 如果您認為這確實是不可避免的,那么除了部分類問題之外,您仍然可以執行此操作,但是請注意,EF在實現StdModel
對象時也會使用setter。 如果數據庫中存在異常值,您將不會注意到!
考慮到所有這些,我將創建兩個委托屬性,將值轉換為映射的屬性,例如...
public string StdNameSetToUpper
{
get { return StdName; }
set { StdName = value.ToUpper(); }
}
...或(最好)與視圖模型一起使用,該視圖模型在UI和數據層之間傳輸轉換后的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.