我有一个MVC网站,其中包含产品详细信息视图。 在这个视图中有许多关于该产品的细节。
我需要的是在将用户添加到购物车之前询问用户一些问题。 例如什么颜色,什么尺寸,数量....但并非所有产品都有相同的选项列表。 有些选项会有一个下拉列表,其他选项将是自由文本字段。 构建页面此部分的最佳方法是什么?感觉就像我需要一个产品表中的xml字段,该字段包含特定于产品的xml,可以将其解析到此页面的选项部分。但我不知道这是否可能或我将如何保存数据。
如果您对最佳解决方案有任何想法,我将非常感激!!
由于 约翰
答案 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,对于每个实际类型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.
当然显示工作方式相同。