Me he recomendado inicialmente respuesta Sams, ya que no habría entrañado ninguna unión de la propiedad Path en absoluto. Mencionaste que podrías concatenar los valores usando una propiedad de ruta ya que esto causaría que se produzca una carga diferida. Me imagino que estás usando tus modelos de dominio para mostrar información a la vista. Por lo tanto, recomendamos el uso de modelos de vista para mostrar sólo la información requerida en la vista (a continuación, utilizar Sams respuesta a recuperar la ruta) y luego asignar la vista del modelo para el modelo de dominio usando una herramienta (es decir AutoMapper).
Sin embargo, si continúa utilizando su modelo existente en la vista y no puede usar los otros valores en el modelo, puede establecer la propiedad de ruta a los valores proporcionados por el proveedor de valor de formulario en una carpeta de modelo personalizado después del se ha producido otro enlace (suponiendo que no se realice ninguna validación en la propiedad del camino).
por lo que permite suponer que tiene la siguiente opinión:
@using (Html.BeginForm())
{
<p>Parent Path: @Html.EditorFor(m => m.ParentPath)</p>
<p>Slug: @Html.EditorFor(m => m.Slug)</p>
<input type="submit" value="submit" />
}
Y el siguiente modelo de vista (o modelo de dominio como puede ser el caso):
IndexViewModel clase pública { cadena pública ParentPath { obtener; conjunto; } cadena pública Slug {get; conjunto; } cadena pública Path {get; conjunto; } }
A continuación, puede especificar el siguiente modelo de ligante:
public class IndexViewModelBinder : DefaultModelBinder
{
protected override void OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
//Note: Model binding of the other values will have already occurred when this method is called.
string parentPath = bindingContext.ValueProvider.GetValue("ParentPath").AttemptedValue;
string slug = bindingContext.ValueProvider.GetValue("Slug").AttemptedValue;
if (!string.IsNullOrEmpty(parentPath) && !string.IsNullOrEmpty(slug))
{
IndexViewModel model = (IndexViewModel)bindingContext.Model;
model.Path = bindingContext.ValueProvider.GetValue("ParentPath").AttemptedValue + "/" + bindingContext.ValueProvider.GetValue("Slug").AttemptedValue;
}
}
}
Y finalmente especificar que este modelo aglutinante es para ser utilizado con el atributo siguiente en el modelo de vista:
[ModelBinder(typeof(IndexViewModelBinder))]
¿Tendría razón al decir que 'page.Parent.Path' y' page.Slug' están obligados desde el formulario y que quiere que 'page.Path' se establezca en la concatenación de sus contenidos justo después de que se produce el enlace? es decir, el valor 'page.Path' no existe en el formulario? – Dangerous
@Dangerous correcto, 'page.Path' no está en el formulario. Obtengo 'page.Parent.Id' y' page.Slug' del formulario. –
Y quiero construir el 'page.Path' después de que' page.Parent' y 'page.Slug' están vinculados. –