Calling all developers! We invite you to provide your input on Feature Experimentation by completing this brief survey.
Calling all developers! We invite you to provide your input on Feature Experimentation by completing this brief survey.
Checkout the Alloy demo project way of handling viewmodel. I like that way.
Normally you just call Html.PropertyFor() to render the content area including any blocks within it. So that foreach loop looks wrong...
Hi,
I am developing a commernce site and need to deal with a lot of data. What's the best way to design the View Models and the Page types and block types?
Curently, I am referring the Page Type inside the View Model and passing the model to the view. This is working fine. But when I need to use Blocks, this is not working. BlocksData is referred by the MainContentArea using @Html.PropertyFor and I am not finding any way to pass the data or view model to the Block template. I tried many options to pass the data and but nothing seems to work.
Am I doing correct by referring the page type inside a View Model? A sample view model and controller is below.
public class DeliveryViewModel : BaseViewModel
{
///
/// Gets or sets the current page.
///
///
/// The current page.
///
public DeliveryPage CurrentPage { get; set; }
/// TransactionData { get; set; }
/// Gets or sets the Transaction data.
///
///
/// The conversion data.
///
public List
///
/// Gets or sets the promotion code.
///
///
/// The promotion code.
///
public string PromotionCode { get; set; }
}
public class DeliveryPage : CommonOrderDetails
{
public virtual ContentArea MainContentArea { get; set; }
}
public class TransactionBlock : BlockData
{
[Display(
Name = "Header",
Description = "Enter a header for the block",
GroupName = SystemTabNames.Content,
Order = 1)]
[Required]
public virtual string Header { get; set; }
[Display(
Name = "Description",
Description = "Enter a Description for the block",
GroupName = SystemTabNames.Content,
Order = 2)]
[Required]
public virtual XhtmlString Description { get; set; }
}
public ActionResult Index(DeliveryPage currentPage)
{
var model = new DeliveryViewModel();
model.CurrentPage = currentPage;
return this.View(model);
}
public class TransactionBlockController : BlockController
{
public override ActionResult Index(TransactionBlock currentblock)
{
return PartialView(currentblock);
}
}
And Inside the Delivery-> Index.cshtml I am calling the MainContentArea like below
@foreach (var model in Model.TransactionData)
{@Html.PropertyFor(x => x.CurrentPage.MainContentArea)
}
Is this correct? Is there any better way?
Thanks