MVC网站中的动态选项

时间:2011-01-17 15:58:22

标签: model-view-controller

我有一个MVC网站,其中包含产品详细信息视图。 在这个视图中有许多关于该产品的细节。

我需要的是在将用户添加到购物车之前询问用户一些问题。 例如什么颜色,什么尺寸,数量....但并非所有产品都有相同的选项列表。 有些选项会有一个下拉列表,其他选项将是自由文本字段。 构建页面此部分的最佳方法是什么?感觉就像我需要一个产品表中的xml字段,该字段包含特定于产品的xml,可以将其解析到此页面的选项部分。但我不知道这是否可能或我将如何保存数据。

如果您对最佳解决方案有任何想法,我将非常感激!!

由于 约翰

1 个答案:

答案 0 :(得分:0)

很简单。

首先,看一下MVC中的template folder,你会得到两种类型的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; }
}

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.

}

等等。

然后让我们说你在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,对于每个实际类型TextQuestionRadioQuestion它将在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.

当然显示工作方式相同。