11 NİSAN 2011, PAZARTESİ
numaralama html geçer.radiobuttonfor MVC3
Bir Numaralama 2 olası değerler açık=0 olan ActionStatus Denir ve = 1 kapalı
public enum ActionStatus
{
Open,
Closed
}
İstiyorum kurmak için radyo düğmesi grubu içinde benim düzenleyin ve oluşturun manzarası kullanan numaralama doldurmak için radyo düğmeleri ile) varsayılan değer oluşturmak görüntülemek ve b) seçili Seçenek Düzenle görüntüleyin.
Bunun için bir uzantısı yöntemi ihtiyacım var, ve herkes zaten bir tane yarattı?
EDİT: bu Model benim sınıf . aşağıda Darins cevabı Sonra
namespace Actioner.Models
{
[MetadataType(typeof(MeetingActionValidation))]
public class MeetingAction
{
[Key]
public int MeetingActionId { get; set; }
[Required]
[Display(Name = "Description")]
public string Description { get; set; }
[Required]
[Display(Name = "Review Date")]
public DateTime ReviewDate { get ;set; }
public int Status{ get; set; }
[ScaffoldColumn(false)]
public int MeetingId { get; set; }
//public virtual Meeting Meeting { get; set; }
//public virtual ICollection<User> Users { get; set; }
public virtual ICollection<ActionUpdate> ActionUpdates { get; set; }
public MeetingActionStatus ActionStatus { get; set; }
}
public enum MeetingActionStatus
{
Open,
Closed
}
ve bu benim görüşüm
@model Actioner.Models.MeetingAction
@using Actioner.Helpers
<div class="editor-label">
@Html.LabelFor(model => model.Description)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Description)
@Html.ValidationMessageFor(model => model.Description)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ReviewDate)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ReviewDate)
@Html.ValidationMessageFor(model => model.ReviewDate)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Status)
</div>
<div class="editor-field">
@Html.RadioButtonForEnum(x => x.ActionStatus)
</div>
Ve bu benim denetleyicisi eylem oluşturun
public virtual ActionResult Create(int id)
{
var meetingAction = new MeetingAction
{
MeetingId = id,
ReviewDate = DateTime.Now.AddDays(7)
};
ViewBag.Title = "Create Action";
return View(meetingAction);
}
Numaralama görünümünde Güzel Görüntüler, ama seçeneği seçili veritabanı kalıcı değildir
CEVAP
11 NİSAN 2011, PAZARTESİ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html;
namespace YourNamespace
{
public static class HtmlExtensions
{
public static MvcHtmlString RadioButtonForEnum<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression
)
{
var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
var names = Enum.GetNames(metaData.ModelType);
var sb = new StringBuilder();
foreach (var name in names)
{
var id = string.Format(
"{0}_{1}_{2}",
htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix,
metaData.PropertyName,
name
);
var radio = htmlHelper.RadioButtonFor(expression, name, new { id = id }).ToHtmlString();
sb.AppendFormat(
"<label for=\"{0}\">{1}</label> {2}",
id,
HttpUtility.HtmlEncode(name),
radio
);
}
return MvcHtmlString.Create(sb.ToString());
}
}
}
Ayrıca generic constraint to an enum type bu yardım için bir yöntem Uygula.
ve sonra:
Model:
public enum ActionStatus
{
Open,
Closed
}
public class MyViewModel
{
public ActionStatus Status { get; set; }
}
Denetleyici:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel
{
Status = ActionStatus.Closed
});
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
return View(model);
}
}
Görünüm:
@model MyViewModel
@using (Html.BeginForm())
{
@Html.RadioButtonForEnum(x => x.Status)
<input type="submit" value="OK" />
}
Bunu Paylaş:
ASP.NET MVC3 - @button ile Html.Editor...
Koşullu HTML Jilet MVC3 kullanarak Özn...
MVC3 Razor, nasıl bir eylem içinde işl...
MVC3 Razor: kod bloğu içinde html Görü...
Koru-yazı tipi boyutu zaman portreden ...