我正在使用enum和的自定义Selector类来帮助在单选按钮,下拉菜单,复选框等之间进行选择。我正在使用NHibernate。通过单选(单选按钮,下拉菜单),来自attribute的值[Display(Name = "[Some Text]")]将填充到数据库表中(注意:我使用的是扩展名Display(Name))。但是,对于多个选择(复选框,多列表),我无法弄清楚如何将enum选择的值添加到数据库中。
这是我的模型的各个部分(每个部分都在单独的文件中)(编辑:我为它们指定了通用名称,以免进一步混淆问题):
public enum MyEnum
{
[Display(Name = "Text for enum1")]
enum1,
//Left out 2 - 10 for brevity
[Display(Name = "Text for enum10")]
enum10
}
...
public class MyEnumSelectorAttribute : SelectorAttribute
{
public override IEnumerable<SelectListItem> GetItems()
{
return Selector.GetItemsFromEnum<MyEnum>();
}
}
...
[Display(Name = "This is a checkboxlist (select one or more check boxes)?")]
[MyEnumSelector(BulkSelectionThreshold = 10)]
public virtual List<string> MyEnumCheckBox { get; set; }
... …Run Code Online (Sandbox Code Playgroud) 基于asp.net mvc(拆分视图模型,单一模型)中多步注册过程问题的优秀答案,我使用了Darin Dimitrov提供的示例来测试ASP.net MVC3向导.它独立运行,但不在Orchard CMS v1.3中.
我收到以下错误:
'/'应用程序中的服务器错误.
无法创建接口的实例.
描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.MissingMethodException:无法创建接口的实例.
来源错误:
在执行当前Web请求期间生成了未处理的异常.可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息.
堆栈跟踪:
[MissingMethodException:无法创建接口的实例.]
System.RuntimeTypeHandle.CreateInstance(RuntimeType类型,Boolean publicOnly,Boolean noCheck,Boolean&canBeCached,RuntimeMethodHandleInternal&ctor,Boolean&bNeedSecurityCheck)+0
System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean skipCheckThis, Boolean fillCache)+98
System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly,Boolean skipVisibilityChecks,Boolean skipCheckThis,Boolean fillCache)+241 System.Activator.CreateInstance(Type type,Boolean nonPublic)+69
System.Web.Mvc.DefaultModelBinder.CreateModel(ControllerContext controllerContext,ModelBindingContext bindingContext,Type modelType)+199 System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext,ModelBindingContext bindingContext)+572
System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext)+449
System.Web. Mvc.ControllerActionInvoker.GetPa rameterValue(ControllerContext controllerContext,ParameterDescriptor parameterDescriptor)+317
System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext,ActionDescriptor actionDescriptor)+117
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext,String actionName)+343
System.Web. Mvc.Controller.ExecuteCore()+116
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)+97 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext)+10
System.Web .Mvc.<> c__DisplayClassb.b__5()+37
System.Web.Mvc.Async.<> c__DisplayClass1.b__0()+21
System.Web.Mvc.Async.<> c__DisplayClass81.<BeginSynchronous>b__7(IAsyncResult _) +12 System.Web.Mvc.Async.WrappedAsyncResult1.End()+ 62 System.Web .Mvc.<> c__DisplayClasse.b__d()+50
System.Web.Mvc.SecurityUtil.b__0(Action f)+7 …
我一直在GooglePlex上搜索高/低,这里是一个MVC3向导示例(多步),它不会调用MVC3(和jQuery)的clientsidevalidation元素.我在这里看到了至少一个关于某些元素的详细解释:asp.net mvc中的多步注册过程问题(splitted viewmodels,single model),但是我无法让它正常工作.
作为MVC3的新手和一般的编程,我怀疑它的经验水平阻碍了我的工作.
无论如何,对非Jquery MVC3向导样本的任何指导都会很棒.先感谢您.
我正在尝试转换以下内容:
public IEnumerable<string> MyProperty
{
get
{
if (String.IsNullOrWhiteSpace(Record.MyProperty)) return new string[] { };
return Record
.MyProperty
.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries)
.Select(r => r.Trim())
.Where(r => !String.IsNullOrEmpty(r));
}
set { Record.MyProperty = value == null ? null : String.Join(",", value); }
}
Run Code Online (Sandbox Code Playgroud)
处理一个enum,但我失败了(这是一个词吗?)。
我正在尝试这样的事情:
string.Split(new[] ',', Record.MyProperty).Select
(r => (MyEnum)Enum.Parse(typeof(MyEnum), r));
Run Code Online (Sandbox Code Playgroud)
进行解析,但再次“严重失败”。
有什么指导吗?谢谢。
更新:
我正在尝试将这些数据保留为string. 因此,如果用户选择四个中的三个enums,它将保存为字符串:“Choice1,Choice2,Choice3”。
上面的代码是一个代理public string MyProperty { get; set; }
我正在获得无处不在的"对象引用"错误,并且不知道如何解决它.我认为这与调用局部视图有关.我正在使用jquery向导,因此部分视图是向导中显示的"步骤".
在我的主.cshtml视图中,我这样做(我忽略了HTML):
@using MyNamespace.Models
@using MyNamespace.ViewModels
@model MyViewModel
...
...
using (Html.BeginForm())
{
...
// this works inside MAIN view (at least it goes through
// before I get my error)
if (Model.MyModel.MyDropDown == DropDownChoice.One)
{
//display something
}
...
// here i call a partial view, and in the partial view (see
// below) I get the error
@{ Html.RenderPartial("_MyPartialView"); }
...
}
Run Code Online (Sandbox Code Playgroud)
上面的工作(至少它在我得到我的错误之前通过).
这是我的部分视图(再次,省略HTML):
@using MyNamespace.Models
@using MyNamespace.ViewModels
@model MyViewModel
....
// I get the object …Run Code Online (Sandbox Code Playgroud)