ChatGPT解决这个技术问题 Extra ChatGPT

Html.EditorFor 设置默认值

菜鸟问题。我有一个参数被传递给创建视图。我需要使用默认值设置字段名称。 @Html.EditorFor(model => model.Id) 我需要使用名称 Id 设置此输入字段,并使用通过 actionlink 传递给视图的默认值。

那么,如何将这个输入字段 --@Html.EditorFor(model => model.Id) 设置为默认值。

下面的工作吗?其中数字 5 是我传递到文本字段以设置默认值的参数。

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

C
Community

这是我发现的:

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

使用大写 V,而不是小写 v(假设 value 是 setter 中通常使用的关键字)Lower vs upper value

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

不工作

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

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

价值与价值。不知道我会不会太喜欢那个。

为什么不检查控制器动作是否属性有一个值,如果它不只是在你的视图模型中将它设置为你的默认值并让它绑定以避免所有这些猴子在视图中工作?


从不在使用 HtmlHelper 方法时设置 value 属性。在将模型传递给视图之前,在 GET 方法中设置属性的值。
为什么是这样?
S
Shadi

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

//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 中设置默认值。
E
Eugene

在 View 中设置默认值是不对的。视图应该执行显示工作,而不是更多。这个动作打破了 MVC 模式的意识形态。所以设置默认值的正确位置 - 控制器类的创建方法。


我想将日期时间值 (dd/MM/yyyy mm:HH:ss) 的格式更改为 (yyyy/MM/dd)
M
Mathias Lykkegaard Lorenzen

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

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 帮助器,因此它将 FK id 保存在数据库中。我怎么做?
S
Smithy

我刚做了这个(Shadi的第一个答案),它很有效:

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

我可以将默认值放在我的模型中,就像一个支持 MVC 的瘾君子一样:(我正在使用实体框架)

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

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

任何人都可以看到这有什么缺点吗?


这些是固定的默认值,如果你想在运行时提供它,你需要不同的方法。
谢谢@Shadi,从技术上讲 Datetime.Now 不是固定值。如果默认值是在运行时生成的,是模型的职责还是控制器的职责?
只需参考MVC规则(你可以打破它!)Model只是用于保存数据,View用于查看它,您的业务应该放在Controller或控制器访问的类中。简短的回答,这是控制器的责任。
Z
Zapnologica

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

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

v
vapcguy

将其推入 ViewBag

控制器:

ViewBag.ProductId = 1;

看法:

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

M
Mohamed Wardan

这对我有用

在控制中

 ViewBag.AAA = default_Value ;

在视图中

@Html.EditorFor(model => model.AAA, new { htmlAttributes = new { @Value = ViewBag.AAA } }

J
Joe

这对我有用:

在控制器中

*ViewBag.DefaultValue= "Default Value";*

在视图中

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

Z
Ziad Adnan

对我来说,我需要将当前日期和时间设置为默认值,这解决了我在 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 元素的值。
O
Ozan BAYRAM

在模型类的构造函数方法中,随意设置默认值。然后在您的第一个操作中创建模型实例并将其传递给您的视图。

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

H
Hamed Rezaei

这是我的工作代码:

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

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