Возможно, но это долгий путь.
Шаг 1: напишите вашу форму
например:
@using (Ajax.BeginForm(YourMethod, YourController, new { id= Model.Id }, new AjaxOptions {//needed options }, new { enctype = "multipart/form-data" }))
{
<input type="file" id="image" name="image" />
<input type="submit" value="Modify" />
}
Шаг 2: перехватить запрос и отправить его на сервер
<script type="text/javascript">
$(function() {
$("#form0").submit(function(event) {
var dataString;
event.preventDefault();
var action = $("#form0").attr("action");
if ($("#form0").attr("enctype") == "multipart/form-data") {
//this only works in some browsers.
//purpose? to submit files over ajax. because screw iframes.
//also, we need to call .get(0) on the jQuery element to turn it into a regular DOM element so that FormData can use it.
dataString = new FormData($("#form0").get(0));
contentType = false;
processData = false;
} else {
// regular form, do your own thing if you need it
}
$.ajax({
type: "POST",
url: action,
data: dataString,
dataType: "json", //change to your own, else read my note above on enabling the JsonValueProviderFactory in MVC
contentType: contentType,
processData: processData,
success: function(data) {
//BTW, data is one of the worst names you can make for a variable
//handleSuccessFunctionHERE(data);
},
error: function(jqXHR, textStatus, errorThrown) {
//do your own thing
alert("fail");
}
});
}); //end .submit()
});
</script>
Шаг 3: Поскольку вы делаете вызов ajax, вы, вероятно, хотите заменить какое-либо изображение или что-то вроде multipart/form-data
например:
handleSuccessFunctionHERE(data)
{
$.ajax({
type: "GET",
url: "/Profile/GetImageModified",
data: {},
dataType: "text",
success: function (MSG) {
$("#imageUploaded").attr("src", "data:image/gif;base64,"+msg);
},
error: function (msg) {
alert(msg);
}
});
}
Переменная MSG является зашифрованной строкой base64. В моем случае это источник изображения.
Таким образом, мне удалось изменить изображение профиля, и после этого изображение немедленно обновляется.
Также убедитесь, что вы добавили Application_Start (global.asax)
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
Довольно мило нет?
P.S .: Это решение работает, поэтому не стесняйтесь спрашивать более подробную информацию.