2014-09-29 21 views
2

我想创建一个模型视图控制器,而不必为单个控件设置if-else,或者不得不复制这些控件以处理不同的屏幕控件。
目前我有: -mvc替代多个视图和控制器使用if-else

//控制器

public ActionResult DisplayThing1(int thingType, string thingName){ 

    Thing1Model model = new Thing1Model(); 
    return View(model); 
} 

[HttpPost] 
public ActionResult DisplayThing1(Thing1Model model) 
{ 
    Save(model); 
    return RedirectToAction("DisplayThing1"); 
} 

//模型

public class Thing1Model() 
{ 
public int type {get; set; } 
public string Name {get; set;} 
} 

//视图

@using(Html.BeginForm(....)) 
{ 
@Html.HiddenFor(m=>m.type); 
@Html.LabelForI(m=>m.Name); 
} 

我已经几乎复制控制器Thing2Model,该模型本身是

public class Thing2Model() 
{ 
public int type {get; set; } 
public string Name {get; set;} 
public DateTime MyDate {get; set;} 
} 

组合视图如下所示。

@using(Html.BeginForm(....)) 
{ 
@Html.HiddenFor(m=>m.type); 
@Html.LabelForI(m=>m.Name); 
@if(type == "2") 
{ 
    @Html.TextBoxFor(m=>m.MyDate); 
} 
} 

我找一个更好的选择,以避免@if以及重复的代码

编辑: 添加到@ W92的答案。我们还需要更改模型联编程序以支持继承模型。 否则,在这段代码的视图中,MVC不会理解如何放置子属性。

Polymorphic model binding

+1

您试图使用partialVie w或Html.Action()? (它返回PartialView)。在Html.Action中你可以放置一个参数等等。听起来很不错。对于服务Html.Action good的使用属性的操作:'[ChildActionOnly()]'(在谷歌中读取)或要求更多详细信息:-) – W92 2014-09-29 15:23:18

+0

我想使用局部视图,但常见字段需要显示在不常见的。请参阅http://www.gliffy.com/go/publish/image/6238620/L.png。我如何用局部视图来做到这一点? – heyNow 2014-09-29 15:37:22

+0

我不明白这个问题,你能详细解释一下吗? – W92 2014-09-29 19:28:17

回答

1

我完全不明白你的问题,但还不错,还有对任何错误抱歉。

public class Thing1Model() 
{ 
public int type {get; set; } 
public string Name {get; set;} 
} 

public class Thing2Model() : Thing1Model 
{ 
    public DateTime MyDate {get; set;} 
} 

,并在您查看:// MODEL2

@using(Html.BeginForm(....)) 
{ 
    @Html.PartialView("_myForm"); 
     @Html.TextBoxFor(m=>m.MyDate); 
} 

_myForm有Thing1Model与内容的模型:

@Html.HiddenFor(m=>m.type); 
@Html.LabelForI(m=>m.Name); 

但是当将在视图(thing1),只使用:

@using(Html.BeginForm(...)) 
{ 
@Html.PartialView("_myForm"); 
} 
+0

好!我没有想到这一点。那么1)控制器只使用父模型来获取,发布? 2)视图可以在父模型上强类型吗? – heyNow 2014-09-29 20:23:43

+1

模型用于呈现您的数据(文本框,标签等)。它只返回唯一的html。在f12浏览器上测试它。这是一个必要的信息。我更喜欢你用microsoftacademy学习:-)这里有三个伟大的课程(一个来自其他网站): http://www.microsoftvirtualacademy。com/training-courses/introduction-to-asp-net-mvc http://www.microsoftvirtualacademy.com/training-courses/developing-asp-net-mvc-4-web-applications-jump-start 和 http://pluralsight.com/training/Player?author=scott-allen&name=mvc4-building-m6-ajax&mode=live&clip=0&course=mvc4-building 真的很值得! :-) – W92 2014-09-29 20:29:30

相关问题