I have a BarEditor.ascx, that can be called from diffent places.
<%@ Control Language=\"C#\" Inherits=\"System.Web.Mvc.ViewUserControl
You should to learn about Model Mapping in ASP.Net MVC. Everything in the asp.net mvc page will be rendered to html control therefore don't distinguish between controls in <% Html.RenderPartial("BarEditor", ViewData["bar"]); %> and <% Html.RenderPartial("BarEditor", ViewData["baz"]); %>
just create a ViewModel class for your BarEditor and make it strongly typed to this new class
e.g.
namespace ViewModel {
public class BarEditor {
string Prefix { get; set; }
Models.Bar Bar { get; set; }
}
}
now you create your textbox in BarEditor.ascx like this
<%= Html.TextBox(Model.Prefix + ".a") %>
and in your view you include the BarEditor like that
<form action="update">
<div>
<% Html.RenderPartial("BarEditor", new ViewModel.BarEditor { Prefix = "Bar", Bar = ViewData["bar"]}); %>
</div>
<div>
<% Html.RenderPartial("BarEditor", new ViewModel.BarEditor { Prefix = "Baz", Bar = ViewData["baz"]}); %>
</div>
<input type="submit" value="Submit" />
</form>
hth
Why not create a model for the view? Your view would then need to be a strongly typed view using the data class FormView.
public class FormView
{
string Bar {get; set;}
string Baz {get; set;}
}
Then in your view you can use
<form action="update">
<div>
<% Html.RenderPartial("BarEditor", Model.Bar); %>
</div>
<div>
<% Html.RenderPartial("BarEditor", Model.Baz); %>
</div>
<input type="submit" value="Submit" />
</form>
Your controller becomes
public ActionResult Update(FormView MyForm)
{
... = MyForm.Bar;
... = MyForm.Baz;
}
I would pass a string ("baz" or "bar", etc) with my ViewData when calling the user control. Have the html.textbox get its name from the text passed and its value from the value passed.