As a suggestion you can use ViewData to pass the type of action and avoid creating the control. Like this:
In the edit view page
Html.RenderPartial("YourControl", Model, new { actionType = "edit" });
In the create view page
Html.RenderPartial("YourControl", Model, new { actionType = "create" });>
In the control view page
if (ViewData["actionType"] == "edit") {
Html.HiddenFor(m => m.Id)
}
Like this the hidden field will only be rendered when the control is called from the Edit view page.