Re (2): Я думаю, что генерировать HTML внутри контроллера - плохая идея - разделение интересов предполагает, что View должен нести полную ответственность за HTML.
Однако вы можете иметьсвойство в вашей модели представления, которое сообщает представлению, какую версию генерировать: например,
public class XyzModel
{
public string displayType { get; set; }
// ... other properties
}
Затем в представлении вы можете проверить эту переменную:
@if (Model.displayType == "grid")
{
// html for grid
}
else if (Model.displayType == "accordian")
{
// html for accordian
}
и т. д., все блоки HTMLиспользуя те же данные.
Если вы хотите использовать Ajax для заполнения этого, вы можете изолировать этот код в частичном представлении и заполнить его, используя jQuery, что-то вроде:
$.post(
form.attr("action"),
form.serialize(),
function (data) {
$("#dataDisplay").html(data);
});
гдераздел dataDisplay может выглядеть так:
<div id="dataDisplay">
@Html.Partial("DataDisplayPartial", Model)
</div>
, а представление DataDisplayPartial будет содержать приведенный выше код ... что-то вроде этого.