gpt4 book ai didi

c# - mvc 替代对多个 View 和 Controller 使用 if-else

转载 作者:太空宇宙 更新时间:2023-11-03 13:16:09 24 4
gpt4 key购买 nike

我想创建一个模型- View - Controller ,而无需为各个控件设置 if-else,或者必须复制它们来处理不同的屏幕控件。
目前我有:-

// Controller

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;}
}

// View

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

Thing2Model 我有很多重复的 Controller ,模型本身是

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

组合 View 如下所示。

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

我正在寻找一个更好的选择来避免 @if 以及重复的代码

编辑:添加到@W92 答案。我们还需要更改模型绑定(bind)器以支持继承模型。否则,在这段代码的 View 中,MVC 将无法理解如何放置子属性。

Polymorphic model binding

最佳答案

我不完全理解你的问题,但很好,对于任何错误,我们深表歉意。

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

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

在你的 View 中://model2

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

_myForm 有一个 Thing1Model 模型,内容为:

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

但是什么时候会在View(thing1)中,只用:

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

关于c# - mvc 替代对多个 View 和 Controller 使用 if-else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26103269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com