ASP.Net MVC自定义数据类型传递其他值

时间:2013-12-09 14:01:08

标签: c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我创建了自定义“DataType”注释,用于模型对象,告诉它是视图上的日期字段。 ([DataType("Date")])如果我使用@Html.EditorFor(model => model.DateCreated),它将作为日期字段并播放JavaScript日期选择器。这是我在EditorTemplates下使用的模板

@inherits System.Web.Mvc.WebViewPage<DateTime> 
<div class="input-append date" data-date="12-02-2012">
    <input type="text" class="span2">
</div>

查看 -

<div class="control-group">
        @Html.LabelFor(model => model.DateCreated, new { @class = "control-label" })
        <div class="controls" id="date-container">
            @Html.EditorFor(model => model.DateCreated, new { @class="input-append date"})
            @Html.ValidationMessageFor(model => model.DateCreated, null, new { @class = "help-inline" })
        </div>
    </div>

模型 -

[Display(Name = "Date Created")]
[DataType("Date")]        
public DateTime DateCreated { get; set; }

控制器 -

public ActionResult Create(int id)
{
      // Attempt to get new customer object
      GetPaymentResponse paymentResponse = _BillingService.GetPayment(id);

     // Check whether response was successful
     if (paymentResponse.State == BaseResponseState.Valid)
     {              
          paymentResponse.Payment.Type.AvailableOptions = paymentResponse.Payment.Type.AvailableOptions.Where(x => x.Value != "BalancingTransaction").ToList();
          ViewData.Model = paymentResponse.Payment;
          return View();
     }           
}

我需要通过模型中的数据类型向我的视图传递一些额外的值。

E.g。 [DataType("Date"), Format("dd/mm/yy"), StartDate("12-02-2012")]

您能否告诉我如何从模板中获取这些额外价值? (我是ASP.Net MVC的新手,我正在使用MVC 3)

由于

3 个答案:

答案 0 :(得分:1)

如果使用模型绑定,我应该正确地使用值。

在您的视图中,在第一行上设置模型,行:

@model MyViewModel

然后在您的控制器中,不要将Model传递给ViewData,而是执行以下操作:

var model = new MyViewModel();
// do stuff with your model here

return View(model);

答案 1 :(得分:1)

假设StartDate属于Payment

的属性
<div class="control-group">
        @Html.LabelFor(model => model.StartDate, new { @class = "control-label" })
        <div class="controls" id="date-container">
            @Html.EditorFor(model => model.StartDate, new { @class="input-append date"})
            @Html.ValidationMessageFor(model => model.StartDate, null, new { @class = "help-inline" })
        </div>
    </div>

答案 2 :(得分:1)

如果使用属性指定额外信息,则对于定义该成员的类的所有实例,该信息必须是常量。即StartDate对于模型的所有实例都是相同的,因为属性中指定的开始日期必须是常量。

如果这符合你的要求,你可以使用custom metadata provider从自定义属性中获取具体的metadata in your model

如果需要为每种情况传递不同的数据,则必须使用允许传递额外视图数据的EditorFor的任何重载。然后,您可以从模板中的ViewData中读取额外信息。

请注意,元数据提供程序和自定义模板实现以及注册中存在一些警告。考虑您的类型是否可以为空,例如DateTime?