我有一个强类型的母版页,但我想为它的一些子页面使用不同的类型.
例如,在母版页上......
<%@ Master ... Inherits="System.Web.Mvc.ViewMasterPage<MyWeb.Models.Client>" %>
Run Code Online (Sandbox Code Playgroud)
客户端已经是一个复合对象,因此在某些子页面上,我可以保留相同的模型,只需引用成员对象.但是在其他页面上,这样做是没有意义的,因为我正在处理不同的模型,例如,处理Customer模型的子页面.
我的母版页仍然需要客户端模型,但子视图将完全适用于不同的模型.问题是,在控制器中,您只能将一个对象模型传递给View.有没有办法将一个模型传递给主模型,另一个模型传递给视图?谢谢!
为什么UseValue只执行一次?我需要为每个请求调用TeamRepository.
我怎样才能做到这一点?
从TeamEmployee映射到TeamEmployeeInput:
CreateMap<TeamEmployee, TeamEmployeeInput>()
.ForMember(x => x.Teams, x => x.UseValue(GetTeamEmployeeInputs()))
.ForMember(d => d.SelectedTeam, s => s.MapFrom(x => x.Team == null ? 0 : x.Team.Id));
private IEnumerable<TeamDropDownInput> GetTeamEmployeeInputs()
{
Team[] teams = CreateDependency<ITeamRepository>().GetAll();
return Mapper.Map<Team[], TeamDropDownInput[]>(teams);
}
Run Code Online (Sandbox Code Playgroud)
域对象:
public class TeamEmployee : Entity
{
public virtual Employee Employee { get; set; }
public virtual Team Team { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
查看模型对象:
public class TeamEmployeeInput
{
public int? Id { get; set; }
public string …Run Code Online (Sandbox Code Playgroud) 我有一个[HttpPost]像这样的动作方法签名:
[HttpPost]
public ActionResult Edit(ExistingPostViewModel model)
{
// Save the edited Post.
}
Run Code Online (Sandbox Code Playgroud)
现在,在过去(当我没有使用ViewModels,例如R&D)时,我有一个像这样的Edit方法的实现:
[HttpPost]
public ActionResult Edit(Post model)
{
var existingPost = repo.Find(model.Id);
TryUpdateModel(existingPost);
repo.Save(existingPost);
return RedirectToAction("Success", existingPost.Id);
}
Run Code Online (Sandbox Code Playgroud)
哪个很好用.
但我很困惑如何使上述内容适应ViewModel方法.
如果我这样做:
TryUpdateModel(existingPost)
Run Code Online (Sandbox Code Playgroud)
使用我的ViewModel方法,没有太多发生.没有错误,但没有任何更新,因为MVC将不知道如何更新Posta ExistingPostViewModel(在它之前Post- > Post).
现在,我正在使用AutoMapper.所以我想我可以从ViewModel映射到Post,然后保存帖子.
但后来我基本上压倒一切.我不想这样做,并且打败了ViewModel.
有人可以让我迷惑吗?
这似乎是一种非常常见的情况,我对人们如何解决这个问题感到非常难过.我只能看到3种可能的解决方案:
不要在HTTP POST中使用ViewModel.正如我说我这样做,在过去的R&d和它的作品,但现在我看到我的视图的演变(验证,简单),我不能妥协,只是这个问题的缘故.
不要使用TryUpdateModel.可能,但那么我将如何合并这些变化呢?
从左到右使用.啊.但目前这似乎是我倾向的方式.
有人请给我解决方案#4!:)
顺便说一下,我正在使用ASP.NET MVC 3,Razor和Entity Framework.
asp.net-mvc model-binding updatemodel viewmodel asp.net-mvc-3
我正在使用Knockout.js来构建客户端视图模型.在我的视图模型中,我想公开一些可以绑定到页面中元素的函数(典型的MVVM模型).我只希望响应来自按钮的单击事件来调用这些函数,但是在构建视图模型时调用它们...
我已经定义了这样的模型:
<script type="text/javascript">
var ViewModel = function(initialData) {
var self = this;
self.id = initialData;
self.isSubscribed = ko.observable(false);
self.name = ko.observable();
self.SubscribeToCategory = function () {
$.ajax({
url: '@Url.Action("Subscribe", "Category")',
type: 'POST',
data: {
categoryId: self.id
},
success: function () {
self.isSubscribed(true);
},
failure: function () {
self.isSubscribed(false);
}
});
alert('Subscribing...');
};
self.UnsubscribeFromCategory = function () {
$.ajax({
url: '@Url.Action("Unsubscribe", "Category")',
type: 'POST',
data: {
categoryId: self.id
},
success: function () {
self.isSubscribed(false);
},
failure: function () {
self.isSubscribed(true); …Run Code Online (Sandbox Code Playgroud) 即使配置了此处指定的MvxJsonNavigationSerializer,我的复杂类型也不会从Show传递给Init方法v3中导航参数中的自定义类型
public class A
{
public string String1 {get;set;}
public string String2 {get;set;}
public B ComplexObject1 {get;set;}
}
public class B
{
public double Double1 {get;set;}
public double Double2 {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
当我将对象A的实例传递给ShowViewModel方法时,我收到此对象,String1&String2正确反序列化,但CopmlexObject1为null.
如何处理复杂对象MvvmCross序列化?
我正在学习ViewModel,LiveData并且在此过程中产生了疑问。
如果我需要启动一个,我应该怎么做Activity?
是否可以将上下文作为参数传递给ViewModel(上下文不会存储在 ViewModel 中)?
ActivityAViewModel : ViewModel() {
// ...
fun openActivityB(context: Context) {
context.startActivity(...)
}
// ...
}
ActivityA {
// ...
fun onSomethingHappened() {
viewModel.openActivityB(this)
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果不是,在这种情况下最正确的做法是什么?
android viewmodel android-viewmodel android-architecture-components
我正在使用S#arp架构,我不记得我在哪里阅读它,但他们说他们的ViewModel应该存储在服务层,你的视图应该将viewmodel提交给服务进行处理.
我的问题是这个.应该构建ViewModel的哪一层?它应该在服务层,控制器是否请求它?或者控制器应该自己构建它?还有一个关于更新视图模型的问题,就好像它包含集合,并且模型状态无效,您还需要重新设置任何列表.
有什么建议?
非常感谢
马特
我正在使用L. Bugnion的MVVM Light Framework.
将客户ID等参数传递给ViewModel构造函数的一些推荐方法是什么?
编辑:每个ViewModel所需的参数不是跨模型共享的参数.它是每个viewmodel实例独有的东西.
我有两个模型,如下所示,我试图从一个视图中插入一个模型到数据库.我创建了一个视图模型,试图这样做.
public class Blog
{
public int BlogID { get; set; }
public string Title { get; set; }
public DateTime CreatedOn { get; set; }
public virtual User User { get; set; }
public virtual ICollection<BlogPost> Posts { get; set; }
}
public class BlogPost
{
public int PostID { get; set; }
public string Body { get; set; }
public DateTime CreatedOn { get; set; }
public int UserID { get; set; }
public virtual User User { …Run Code Online (Sandbox Code Playgroud) ViewModel如果以下列方式使用,新类的实例可以在配置更改后继续存在:
mViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
Run Code Online (Sandbox Code Playgroud)
但是,除了配置更改之外,还有一个保存还原方案,当整个应用程序的进程被终止时.
ViewModel在保存还原方案中,是否会保留字段内的值?
编辑:根据这个问题的答案,我写了这篇文章:Android ViewModel Architecture Component is Dangerous
android viewmodel view-model-pattern android-viewmodel android-architecture-components
viewmodel ×10
asp.net-mvc ×3
android ×2
android-architecture-components ×2
automapper ×1
c# ×1
complextype ×1
function ×1
javascript ×1
knockout.js ×1
mapping ×1
master-pages ×1
mvvm ×1
mvvm-light ×1
mvvmcross ×1
navigation ×1
silverlight ×1
updatemodel ×1