Nano Hash - криптовалюты, майнинг, программирование

MVC создает с использованием производного класса

Я новичок в MVC, поэтому заранее извиняюсь, если что-то непонятно.

У меня есть базовый класс (скажем, «Человек») и 2 производных класса («Студент», «Профессор»).

Я хочу использовать 1 представление для функции создания с частичными представлениями, содержащими формы создания для студента или преподавателя. Если я добавлю параметр, я могу свериться с ним, чтобы определить, какое частичное представление показывать.

Но мой вопрос заключается в следующем: при нажатии кнопки «Создать» как я могу определить, какой объект создается?

Изменить (пожалуйста, потерпите вместе со мной, так как я создал их только для того, чтобы проиллюстрировать проблему)

Класс человека:

public class Person
{
    public string Gender { get; set; }
    public int ID { get; set; }
}

Студенческий класс:

public class Student : Person
{
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public List<Course> Courses { get; set; }
}

Профессорский класс:

public class Professor : Person
{
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public double AnnualSalary { get; set; }
}

Итак, мой контроллер Create выглядит так:

public ActionResult Create(int personType)    //1=student, 2=professor
{
    var x = new {
            Student = new Student(),
            Professor = new Professor()
        };
    ViewBag.PersonType = personType;
    return View(x);
}

Тогда мой взгляд выглядит так:

<div>
@if (ViewBag.PersonType == 1)
{
    @Html.Partial("CreateStudentPartialView", Model.Student)
}
else 
{
    @Html.Partial("CreateProfessorPartialView", Model.Professor)
}

Итак, вопрос в том, как будет выглядеть связанное действие создания, когда кнопка «Создать» нажата в любом частичном представлении?

[HttpPost()]
public ActionResult Create(....)    //What would I put as parameter(s)?
{
    //no idea what to do here, since I don't know what object is being passed in
    return RedirectToAction("Index");
}

  • Лучший способ сделать это будет зависеть от ваших текущих моделей/представлений - не могли бы вы опубликовать код? 28.01.2013
  • Просто добавил немного кода. Спасибо, что посмотрели. 28.01.2013

Ответы:


1

Лучше всего здесь иметь несколько действий POST в вашем контроллере.

Итак, в формах в ваших частичных представлениях укажите действие для нажатия

@using (Html.BeginForm("CreateStudent", "Create")) {

а также

@using (Html.BeginForm("CreateProfessor", "Create")) {

Тогда ваш контроллер будет выглядеть примерно так:

[HttpPost]
public ActionResult CreateStudent(Student student)  
{
    //access the properties with the dot operator on the student object
    //process the data
    return RedirectToAction("Index");
}

а также

 [HttpPost]
 public ActionResult CreateProfessor(Professor professor)  
 {
     //access the properties with the dot operator on the professor object
     //process the data
     return RedirectToAction("Index");
 }
28.01.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..