2011-05-19 51 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); 
    }