Ajax.BegineForm () работает с данными многоэлементных форм, и вот пример рабочего кода для того же:
Представление:
@using(Ajax.BeginForm("UploadFile","MyPOC",
new AjaxOptions {
HttpMethod = "POST"
},
new
{
enctype = "multipart/form-data"
}))
{
<input type="file" name="files" id="fileUploaderControl" />
<input type="submit" value="Upload" id="btnFileUpload" />
}
Контроллер Метод действия:
public void UploadFile(IEnumerable<HttpPostedFileBase> files)
{
HttpPostedFileBase file = files.FirstOrDefault(); //Attach a debugger here and check whether you are getting your file on server side or null.
if (file != null && file.ContentLength > 0)
{
//Do other validations before saving the file
//Save File
file.SaveAs(path);
}
}
PS Убедитесь, что атрибут «name» элемента управления загрузчиком файлов и имя параметра, переданного в метод действия UploadFile (), должны быть одинаковыми (то есть «файлы» в данном случае).
Прямого механизма для его создания не существует. DataTemplate наследует свойства другого.
Однако вы можете успешно избежать дублирования кода, используя стили, которые ДЕЙСТВИТЕЛЬНО имеют возможности наследования.
Я считаю, что это даст вам то, что вам нужно:
<Style x:Key="StandardBoundTb" TargetType="TextBlock">
<Setter Property="Padding" Value="0" />
<Setter Property="Margin" Value="0" />
<Setter Property="Text" Value="{Binding Path=Username}" />
<!-- etc -->
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsLoggedIn}" Value="True">
<Setter Property="FontSize" Value="14" />
<!-- etc -->
</DataTrigger>
</Style.Triggers>
</Style>
<Style x:Key="DelimitedBoundTb" TargetType="TextBlock"
BasedOn="{StaticResource StandardBoundTb}"
>
<Setter Property="Text" Value="{Binding Path=Username, StringFormat='{}{0}; '}" />
</Style>
<DataTemplate x:Key="ColoringLabels">
<TextBlock Style="{StaticResource StandardBoundTb}" />
</DataTemplate>
<DataTemplate x:Key="ColoringLabelsDelimited">
<TextBlock Style="{StaticResource DelimitedBoundTb}" />
</DataTemplate>