使用包含该字段的视图模型:
public bool? IsDefault { get; set; }
Run Code Online (Sandbox Code Playgroud)
尝试在视图中映射时出错:
<%= Html.CheckBoxFor(model => model.IsDefault) %>
Run Code Online (Sandbox Code Playgroud)
无法隐式转换类型'bool?' 'bool'.存在显式转换(您是否错过了演员?)
我已经尝试过铸造,使用.Value并且都没有工作.
请注意我想要的行为是提交表单应该IsDefault在模型中设置为true或false.值null仅表示尚未填充模型.
在asp.net mvc - model文件夹中创建模型是最佳做法.将这些模型与您的视图一起使用,并使用服务层将我的模型"调整"到EF模型.
或者你使用了另一种方法.这种方法的问题在于,我的(自制)模型大多数时候都是EF模型的副本(不干)
那么有人可以解释一下你的视图使用什么模型,因为它很令人困惑.model/viewmodel/Entityframeworkmodel ....
方案:
感谢您的回答所有猜测我现在正在重构一些事情!
我有单独的模型和视图模型类.其中viewmodel类仅进行UI级别验证(请参阅:验证:模型或ViewModel).
我可以在控制器中验证模型(vewmodel)是否有效.
问:我如何验证模型(带有数据注释的主要实体).
我没有使用模型对象开发viewmodel.只需复制属性并添加该特定视图中可能需要的所有属性.
//Model Class
public class User
{
[Required]
public string Email {get; set;}
[Required]
public DateTime Created {get; set;}
}
//ViewModel Class
public class UserViewModel
{
[Required]
public string Email {get; set;}
[Required]
public string LivesIn {get; set;}
}
//Post action
public ActionResult(UserViewModel uvm)
{
if( ModelState.IsValid)
//means user entered data correctly and is validated
User u = new User() {Email = uvm.Email, Created = DateTime.Now};
//How do I validate "u"?
return View();
}
Run Code Online (Sandbox Code Playgroud)
应该做这样的事情: …
我注意到我的观点需要与其他人一样的信息.但有时您需要视图模型的5个属性,有时只需要2个属性.
您是在多个视图上共享此类视图模型还是为每个视图创建单独的视图模型,或者您是否优先选择继承或合成策略?
对我来说,共享视图模型有一些缺点:
你怎么看?你是如何处理这种情况的?
我希望在我的视图中使用RenderPartial两次,并关联不同的模型.问题是两个模型中都存在一些属性(昵称,密码).它们没有前缀,所以即使id或名称在输出中也是相同的.现在,如果我有昵称或密码的模型错误,则两个字段都会突出显示.
主要观点:
<div>
<% Html.RenderPartial("Register", Model.RegisterModel); %>
</div>
<div>
<% Html.RenderPartial("Login", Model.LoginModel); %>
</div>
Run Code Online (Sandbox Code Playgroud)
登录PartialView:
<% using (Html.BeginForm("Login", "Member")) { %>
<fieldset>
<legend>Login</legend>
<p>
<%= Html.LabelFor(x => x.Nickname) %>
<%= Html.TextBoxFor(x => x.Nickname) %>
</p>
<p>
<%= Html.LabelFor(x => x.Password) %>
<%= Html.PasswordFor(x => x.Password) %>
</p>
<input type="submit" value="Login" />
</fieldset>
<% } %>
Run Code Online (Sandbox Code Playgroud)
注册PartialView:
<% using (Html.BeginForm("Register", "Member")) { %>
<fieldset>
<legend>Register</legend>
<p>
<%= Html.LabelFor(x => x.Nickname) %>
<%= Html.TextBoxFor(x => x.Nickname) %>
</p>
<p>
<%= Html.LabelFor(x => …Run Code Online (Sandbox Code Playgroud) 看起来其他人有这个问题,但我似乎无法找到解决方案.
我有2个型号:Person&BillingInfo:
public class Person
{
public string Name { get; set;}
public BillingInfo BillingInfo { get; set; }
}
public class BillingInfo
{
public string BillingName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用DefaultModelBinder将此直接绑定到我的Action中.
public ActionResult DoStuff(Person model)
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
但是,在设置Person.Name属性时,BillingInfo始终为null.
我的帖子看起来像这样:
"NAME = statichippo&BillingInfo.BillingName = statichippo"
为什么BillingInfo总是为空?
假设我有三个类是基类的子类:
public class BaseClass
{
public string BaseName { get; set; }
}
public class Subclass1 : BaseClass
{
public string SubName1 { get; set; }
}
public class Subclass2 : BaseClass
{
public string SubName2 { get; set; }
}
public class Subclass3 : BaseClass
{
public string SubName3 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想将这些映射到ViewModel类,如下所示:
public class ViewModel
{
public string BaseName { get; set; }
public string SubName1 { get; set; }
public string SubName2 { get; set; …Run Code Online (Sandbox Code Playgroud) 而不是直接使用对象,在一个简单的Razor View上我有一个表单使用它model作为装饰对象.
public class GlobalAccount
{
public GlobalAccount()
{
this.TestService = new TestServiceModel();
}
public TestServiceModel TestService { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
蜜蜂TestServiceModel代表
public class TestServiceModel
{
[Required]
[Display(Name = "Endpoint (url of your service like http://mydomain/remote/)")]
public string Endpoint { get; set; }
[Required]
[Display(Name = "System username")]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "System password")]
public string Password { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
请注意Password装饰的酒店DataType.Password
在一个Partial …
我正在努力使用C#和XAML为Windows 8制作我的第一个游戏.我还在学习核心概念和最佳实践,而MVVM一直是个障碍.我将尝试分两部分提出这个问题.
背景
我正在制作的游戏是数独游戏.Sudoku有一块包含9x9网格的棋盘.我有三个型号- Game,Board和Tile.当Game被创建时,它自动创建Board,并且当Board被创建时,它创建81(9×9) Tiles.
1.对于视图层次结构,如何创建相应的视图模型?
为了匹配模型的层次结构,我希望有一个视图层次结构(GameView包含一个BoardView包含81 的视图TileViews).在XAML中,使用用户控件创建此视图层次结构非常容易,但我不明白如何创建视图模型.
在我看过的示例中,用户控件的数据上下文通常设置为视图模型(使用ViewModelLocator作为源),它创建视图模型的新实例.如果你有一个平面视图,这似乎很有效,但是当你有一个层次结构时,它似乎也会变得混乱.是否GameView创建GameViewModel并把它留给了BoardView孩子创造一个BoardViewModel?如果是这样,如何GameViewModel与BoardViewModel?沟通?可以BoardViewModel沟通备份层次的GameViewModel?
2.视图模型如何获取模型数据?
在iOS中,我首先使用服务来获取Game预先填充数据的模型.然后我会创建一个GameViewController视图控制器(负责创建视图)并传递Game给它.在MVVM中,我看到让视图负责创建自己的视图模型(理想情况下使用a ViewModelLocator)的价值,但我不明白该视图模型如何获得模型.
在我在网上找到的所有示例中,视图模型使用一些服务来获取自己的数据.但我没有遇到任何接受从更高级别导航传递的构造函数params或params的示例.这是怎么做到的?
我不想为我的模型使用应用程序资源或其他类型的单例存储方法,因为我不是这样做,但如果我想在屏幕上同时显示多个谜题呢?每个都GameView应该包含自己的Game.
不仅GameViewModel需要对Game模型的引用,而且BoardViewModel以某种方式创建(参见问题1)需要引用Board属于Game模型的模型.所有的一切都是如此Tiles.所有这些信息如何传递到链条中?我可以完全在XAML中完成这么多繁重的工作,还是我将不得不在代码中进行某种绑定或其他初始化?
唷!
我很感激你能给出的任何建议,即使它不是一个完整的答案.我也很想找到任何与我自己有类似挑战的MVVM项目的例子.万分感谢!
我正在开发一个Android应用程序,使用LiveData上的MVVM模式(可能是Transformations)和View和ViewModel之间的DataBinding.由于应用程序"正在增长",现在ViewModels包含大量数据,后者中的大多数都保存为LiveData以使视图订阅它们(当然,UI需要这些数据,不管是双向绑定如何每个EditTexts或单向绑定).我听到(和Google搜索)关于在ViewModel中保存代表UI状态的数据.但是,我发现的结果只是简单而通用.我想知道是否有人提示或者可以就此案例分享一些关于最佳实践的知识.简单来说,考虑到LiveData和DataBinding可用,在ViewModel中存储UI(View)状态的最佳方法是什么?提前感谢您的回答!
viewmodel ×10
asp.net-mvc ×5
c# ×5
mvvm ×2
android ×1
asp.net ×1
automapper ×1
data-binding ×1
datamodel ×1
model ×1
modelbinders ×1
nullable ×1
state ×1
subclass ×1
windows ×1
xaml ×1