2011-05-19 738 views
63

菜鳥問題。 我有一個參數被傳遞給創建視圖。我需要設置一個默認值的字段名稱。 @ Html.EditorFor(model => model.Id) 我需要設置此輸入字段的名稱爲Id,並使用默認值通過操作鏈接傳遞給視圖。Html.EditorFor設置默認值

那麼,這個輸入字段 - @ Html.EditorFor(model => model.Id)如何被設置爲默認值。

以下工作?其中數字5是一個參數,我傳入文本字段設置默認值。

@Html.EditorFor(c => c.PropertyName, new { text = "5"; })

回答

55

乾淨的方式這樣做是通過控制器通過創建實體的新實例:

//GET 
public ActionResult CreateNewMyEntity(string default_value) 
{ 
    MyEntity newMyEntity = new MyEntity(); 
    newMyEntity._propertyValue = default_value; 

    return View(newMyEntity); 
} 

如果你想通過ActionLink的

只是爲了打發默認值
@Html.ActionLink("Create New", "CreateNewMyEntity", new { default_value = "5" }) 
+0

這是我最終使用的解決方案。 Anton Semenov是正確的:MVC的思想要求開發人員在Controller中設置默認值,而不是在View中。 – Jake 2012-12-04 16:26:48

85

這裏是我發現:

@Html.TextBoxFor(c => c.Propertyname, new { @Value = "5" }) 

作品以大寫V,不是小寫V(假設作爲值是制定者通常使用的關鍵字)Lower vs upper value

@Html.EditorFor(c => c.Propertyname, new { @Value = "5" }) 

不起作用

你的代碼最終看起來像這樣雖然

<input Value="5" id="Propertyname" name="Propertyname" type="text" value="" /> 

價值與價值。不知道我會太喜歡那個。

爲什麼不只是檢查控制器的行爲,如果proprety具有值或不是,並且它不只是在你的視圖模型中將它設置爲默認值並讓它綁定以避免所有這些猴子的工作在視圖中?

+0

**從不**在使用'HtmlHelper'方法時設置value屬性。在將模型傳遞給視圖之前,您可以在GET方法中設置該屬性的值。 – 2017-12-05 11:30:36

13

更好的選擇是做在您的視圖模型像

public class MyVM 
{ 
    int _propertyValue = 5;//set Default Value here 
    public int PropertyName{ 
     get 
     { 
      return _propertyValue; 
     } 
     set 
     { 
      _propertyValue = value; 
     } 
    } 
} 

然後在您的視圖

@Html.EditorFor(c => c.PropertyName) 

將工作ü希望的方式(如果沒有值默認值將在那裏)

14

它在視圖中設置默認值是不正確的。視圖應該執行顯示工作,而不是更多。這個動作打破了MVC模式的思想。所以設置默認值的地方 - 創建控制器類的方法。

+0

我想將datetime值的格式(dd/MM/yyyy mm:HH:ss)更改爲(yyyy/MM/dd) – 2017-02-09 12:48:56

3

我這樣做(沙迪的第一個答案)和它的工作原理治療:

public ActionResult Create() 
    { 
     Article article = new Article(); 
     article.Active = true; 
     article.DatePublished = DateTime.Now; 
     ViewData.Model = article; 
     return View(); 
    } 

我可以把默認值我ñ我的模型像propper MVC癮君子:(我使用實體框架)

public partial class Article 
    { 
     public Article() 
     { 
      Active = true; 
      DatePublished = Datetime.Now; 
     } 
    } 

    public ActionResult Create() 
    { 
     Article article = new Article(); 
     ViewData.Model = article; 
     return View(); 
    } 

任何人都可以看到任何缺點呢?

+1

這些是固定的默認值,如果你想在運行時提供它,你需要不同的方法。 – Shadi 2012-01-06 16:16:27

+0

謝謝@Shadi,技術上Datetime.Now不是一個固定值。 如果在運行時生成默認值*,它會成爲模型責任人還是控制器? – Smithy 2012-01-13 18:08:33

+1

只需引用MVC規則(您可以打破它!)模型僅用於保存數據,View用於查看它,而您的業務應放置在控制器或由控制器訪問的類中。簡而言之,這是控制者的責任。 – Shadi 2012-01-17 10:33:02

1

@Html.EditorFor()不應該使用您放入模型中的屬性嗎?

[DefaultValue(false)] 
public bool TestAccount { get; set; } 
0

在模型類的構造函數方法中,設置默認值。 然後在您的第一個動作中創建一個模型的實例並將其傳遞給您的視圖。

public ActionResult VolunteersAdd() 
    { 
     VolunteerModel model = new VolunteerModel(); //to set the default values 
     return View(model); 
    } 

    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult VolunteersAdd(VolunteerModel model) 
    { 


     return View(model); 
    }