Html.EditorFor设置默认值


77

新秀问题。我有一个参数传递给创建视图。我需要使用默认值设置一个字段名称。@ Html.EditorFor(model => model.Id)我需要将此输入字段设置为名称ID,并将其默认值通过动作链接传递给视图。

因此,如何使用默认值设置此输入字段-@ Html.EditorFor(model => model.Id)。

请问以下工作?在数字5是参数的情况下,我将输入文本字段以设置默认值。

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

Answers:


64

这样做的干净方法是通过控制器传递创建的实体的新实例:

//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" })

这是我最终使用的解决方案。Anton Semenov是正确的:MVC的思想要求开发人员在Controller中而不是在View中设置默认值。
2012年

101

这是我发现的:

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

适用于大写字母V,而不适用小写字母v(假设值是设置程序中通常使用的关键字)较低值与较高值

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

不起作用

您的代码最终看起来像这样

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

价值与价值。不确定我是否会对此太喜欢。

为什么不只检查控制器操作是否拥有属性,以及是否不只是将其在视图模型中设置为默认值并绑定它,从而避免所有这些猴子在视图中工作?


4
使用HtmlHelper方法时,切勿设置value属性。在将模型传递给视图之前,可以在GET方法中设置属性的值。

17

在View中设置默认值是不正确的。视图应执行显示工作,而不是更多。此举打破了MVC模式的意识形态。因此,正确设置默认值的地方-创建控制器类的方法。


我想将日期时间值(dd / MM / yyyy mm:HH:ss)的格式更改为(yyyy / MM / dd)
艾伦·鲍尔

15

更好的选择是在您的视图模型中执行此操作,例如

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

然后在您看来

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

将按照您想要的方式工作(如果没有值,则存在默认值)


为什么要在VM中对属性值进行硬编码?这对我来说毫无意义,但也许我正在尝试做一些不同的事情?我试图将查询字符串参数id传递给Create视图,并使用该id值填充EditorFor helper,因此它将FK id保存在数据库中。我怎么做?
凯瑟琳

4

我就是这样做的(Shadi的第一个答案),它的确可以治疗:

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

我可以像默认的MVC迷一样将默认值放在模型中:(我正在使用Entity Framework)

    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年

1
感谢@Shadi,从技术上讲Datetime.Now不是固定值。如果默认值在运行时生成的,则是模型责任还是控制器?
Smithy,2012年

3
仅参考MVC规则(您可以破坏它!),模型仅用于保存数据,视图仅用于保存数据,您的业务应该放在控制器中或控制器访问的类中。简短的答案,这是控制器的责任。
沙迪2012年

3

不应该@Html.EditorFor()利用您放入模型中的属性吗?

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

2

将其推入ViewBag

控制器:

ViewBag.ProductId = 1;

视图:

@Html.TextBoxFor(c => c.Propertyname, new {@Value = ViewBag.ProductId})


1

这为我工作:

在控制器中

*ViewBag.DefaultValue= "Default Value";*

在视图中

*@Html.EditorFor(model => model.PropertyName, new { htmlAttributes = new { @class = "form-control", @placeholder = "Enter a Value", @Value = ViewBag.DefaultValue} })*

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);
    }

0

这是我的工作代码:

@Html.EditorFor(model => model.PropertyName, new { htmlAttributes = new { @class = "form-control", @Value = "123" } })

我与其他答案的区别是在htmlAttributes数组中使用Value


0

对我来说,我需要将当前日期和时间设置为默认值,这解决了我在View中添加此代码的问题:

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

我认为这里的答案不是使用DateTime.Now,而是使用@value属性设置Html元素的值。
克里斯蒂安·内罗纳
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.