динамические параметры на сайте MVC - PullRequest
1 голос
/ 17 января 2011

У меня есть веб-сайт MVC, на котором отображается информация о продукте. На этой странице представлен ряд подробностей о товаре.

Мне нужно задать пользователю несколько вопросов, прежде чем они добавят товар в корзину. например, какой цвет, какой размер, кол-во .... но не у всех продуктов одинаковый список опций. Некоторые параметры будут иметь выпадающий список, другие будут свободным текстовым полем. Каков наилучший способ построить этот раздел страницы? Такое ощущение, что мне нужно поле xml в таблице продукта, содержащее специфичный для продукта xml, который можно проанализировать в разделе параметров этой страницы. Но я не знаю, возможно ли это вообще или как мне сохранить данные.

Если у вас есть идеи относительно лучшего решения, я был бы очень признателен !!

Спасибо John

1 Ответ

0 голосов
/ 16 февраля 2013

Очень просто.

Чтобы начать, посмотрите на папку шаблонов s в MVC, вы получите два типа DisplayTemplates и EditorTemplates.

Теперь они работаютТо же, что и в обычном режиме, но живут в специальных папках, например, с именами, указанными выше.

\Views\Home\Index.cshtml  
\Views\Home\DisplayTemplates\MyViewModelName.cshtml
\Views\Home\EditorTemplates\MyViewModelName.cshtml

Вот как они работают.

Если вы создаете ProductDetailsViewModel, как это:

public class ProductDetailsViewModel {
     public IList<Question> Questions { get;set; }
}

A Question может быть абстрактным классом, подобным этому:

public abstract class Question {
 // .. maybe need some common properties here, like answer value?
}

Затем вы можете определить более конкретные вопросы, такие как:

public class TextQuestion : Question {

}

public class RadioQuestion : Question {

 // maybe has a list of options for display etc.

}

Ии так далее.

Затем, скажем, используя вышеуказанную структуру в представлении you \ Home \ Index.cshtml, вы можете просто сделать следующее.

@using(Html.BeginForm())
{
     <p>Put your form here</p>

     @Html.TextboxFor(x=>x.ProductName)

     @Html.EditorFor(x => x.Questions)

     <input type="submit" value="Submit" />
}

Что будет дальше, это MAGIC, для каждогоФактический тип TextQuestion, RadioQuestion будет искать соответствующий частичный вид в EditTemplate и отображать его соответствующим образом.

Так что если у нас есть \ Home \ EditorTemplates \ RadioQuestion.cshtml, определенный как:

@model RadioQuestion

<p>This is a radio button based question</p>

// Implement the radio buttons or text boxes etc here.

Конечно, дисплей работает так же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...