簡體   English   中英

我可以為MVC視圖提供動態模型嗎

[英]can i have dynamic model for mvc view

我正在.Net MVC項目中開發創建表單。 我將為這個問題創建一個簡單的演示,以盡可能接近我的實際業務場景。

我有一個人類和從中繼承的其他幾個類。

public class Person
{
    public int Id { get; set; }
    [Required]
    public string Forename { get; set; }
    [Required]
    public string Surname { get; set; }
    [Required]
    public DateTime Dob { get; set; }
}

public class Teacher: Person
{
    [Required]
    public string Department { get; set; }
}

public class Student: Person
{
    [Required]
    public string TermAddress { get; set; }
}

如果我有如下創建的Action方法。

public class PersonController : Controller
{
public ActionResult Create()
    {
        var personFactory = new PersonFactory();
        var p = personFactory.CreatePerson("student");
        return View(p);
    }
}
public class PersonFactory
{
    public object CreatePerson(string type)
    {
        switch(type)
        {
            case "teacher":
                return new Teacher();
                break;
            case "student":
                return new Student();
                break;
            default:
                return null;
                    break;

        }
    }            
}

是否有可能同時處理兩種情況的視圖? 在我的業務案例中,有10多種不同類型的相似類,我想知道是否有一種方法可以解決該問題而無需創建10多種視圖。 我知道我已經強力輸入了視圖,但是很好。 只要可以使用一個視圖,我就可以擁有10多個視圖模型。 歡迎提出任何其他建議或解決此類問題的方法。 謝謝。

@{
    ????????????? just an idea .. something like that .. ???????????
    var type = "student";
    if(type == "stuent")
    {
        @model WebApplication1.Models.Student
    }
    else if(type == "teacher")
    {
        @model WebApplication1.Models.Teacher
    }
}

<h2>Create</h2>

@using (Html.BeginForm()) 
{
@Html.AntiForgeryToken()

<div class="form-horizontal">        

    @Html.ValidationSummary(true, "", new { @class = "text-danger" })

    @Html.EditorForModel()

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </div>
</div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

不幸的是,文件中只允許使用一個@model聲明,因此不支持您嘗試實現的邏輯。 如果僅使用@ Html.EditorForModel(),則可以使用@model WebApplication1.Models.Person,您將生成正確的編輯器表單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM