Я не использую ASP.NET MVC, поэтому мой ответ может быть неуместным.
В WebForms валидаторы отлично работают на входных файлах. Поэтому, когда я хочу заблокировать отправку формы, если пользователь не предоставил файл, я просто помещаю RequiredFieldValidator.
Например, чтобы заставить пользователя отправить изображение типа GIF / JPG / PNG:
<asp:FileUpload id="FileInput" runat="server" />
<asp:RequiredFieldValidator ControlToValidate="FileInput" runat="server" />
<asp:RegularExpressionValidator ControlToValidate="FileInput" ValidationExpression="^.*\.(gif|GIF|jpe?g|JPE?G|png|PNG)$" runat="server" />
Это не решит ваш вопрос об отключении кнопки отправки, пока файл не был выбран. Этот фрагмент кода jQuery может помочь:
$(function()
{
$("input:file").change(function()
{
var fileName=$.trim($(this).val());
$("input:submit").prop("disabled")=(fileName.length==0);
});
});
Вы должны убедиться, что кнопка отправки изначально отключена.