htmlFieldPrefix breaks names outside partial view

I have a view, which contains this snippet:

@{Html.RenderPartial("~/Features/MainPage/_MyPartialView.cshtml", Model.PartialViewViewModel); }
@Html.HiddenFor(x => x.Model.SomeProperty)

And my partial view starts with

@model PartialViewViewModel
@{
  Html.ViewData.TemplateInfo.HtmlFieldPrefix = "PartialViewViewModel";
}

The issue is, that HiddenProperty’s name from the view is generated using partial view’s prefix too. It’s “PartialViewViewModel.SomeProperty” instead of “SomeProperty”. Switching hiddenfor and partial view in places fixes the problem (name becomes “SomeProperty”). Is there a way to isolate HtmlFieldPrefix just for the partial view?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

You can try to add

@{
    Html.ViewData.TemplateInfo.HtmlFieldPrefix = "";
}

into the view you contains the Partial view.

Here is a demo:

Models:

public class ParentModel
    {
        public PartialViewViewModel PartialViewViewModel { get; set; }
        public string SomeProperty { get; set; }
    }
public class PartialViewViewModel
    {
        public int Id { get; set; }
    }

_MyPartialView.cshtml:

@{
    Html.ViewData.TemplateInfo.HtmlFieldPrefix = "PartialViewViewModel";
}
@Html.TextBoxFor(m=>m.Id)

View Containing _MyPartialView:

@{
    Html.ViewData.TemplateInfo.HtmlFieldPrefix = "";
}
@model ParentModel
@{Html.RenderPartial("_MyPartialView.cshtml", Model.PartialViewViewModel); }
@Html.HiddenFor(x => x.SomeProperty)

result:
htmlFieldPrefix breaks names outside partial view


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x