Как показать предупреждение после успешной загрузки файла в ASP.net MVC 3

На данный момент я могу успешно загрузить файл... Сейчас я пытаюсь показать окно предупреждения, если файл был успешно загружен, или показать предупреждение об ошибке/исключении, если нет...

Вот мой взгляд:

using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { @id = "File", enctype = "multipart/form-data"}))
        {
        <div class="control-group">                
            <input type="file" id="file" name="file" />
            <input type="submit" value="Upload" />
        </div>
        }

Вот мой контроллер:

[HttpPost]   
public ActionResult Upload(HttpPostedFileBase file)
{
    try
    {
        //some code here for the upload....             

        /*In this part is my problem...Both Lines below is not showing the alert...*/
        //return new JavaScriptResult() { Script = "alert('The calendar XML file was uploaded successfully!');" };
        //return JavaScript("alert('The calendar XML file was uploaded successfully!');");
    }

    catch (Exception e)
    {   
        log.Error("HomeController::Upload()", e);
        return new JavaScriptResult() { Script = "alert(\"" + e.Message + "\");" };
    }
}

Я бы хотел, чтобы мое представление по-прежнему оставалось ... без перенаправления страницы ... просто отображалось это окно предупреждения для сообщения ... Спасибо! Любые идеи очень ценятся, потому что я знаю, что мой способ не рекомендуется... :)


person JYR    schedule 07.01.2013    source источник
comment
Как вы можете определить, успешно ли загружен файл, не возвращая ничего из ваших действий?   -  person Karthik Chintala    schedule 07.01.2013
comment
я обработал это в разделе некоторого кода здесь... моя проблема сейчас заключается в том, как показать это окно предупреждения... (если файл не был загружен, я автоматически выдаю исключение в разделе некоторого кода)   -  person JYR    schedule 07.01.2013
comment
раскомментируйте return JavaScript("alert('The calendar XML file was uploaded successfully!');"); и попробуйте $.getScript("/Controller/Action", function(){ alert('script loaded'); }); }); в поле зрения   -  person Karthik Chintala    schedule 07.01.2013
comment
извините, но вернуть JavaScript(alert('XML-файл календаря был успешно загружен!');); просто перенаправит меня на страницу и отобразит предупреждение в простом html...   -  person JYR    schedule 07.01.2013
comment
может быть, вам следует использовать класс построителя строк System.Text.StringBuilder sb = new System.Text.StringBuilder(); string message="successfull"; sb.Append("<script type = 'text/javascript'>"); sb.Append("alert('"); sb.Append(message); sb.Append("')};"); sb.Append("</script>"); return JavaScript(sb.ToString());   -  person Karthik Chintala    schedule 07.01.2013
comment
извините, но я не думаю, что возврат javascript - это правильный путь... это просто возврат простой html-страницы со сценарием в тексте... хммм....   -  person JYR    schedule 07.01.2013
comment
Попробуйте вернуться как return Content(sb.ToString(),"text/javascript");.   -  person Karthik Chintala    schedule 07.01.2013
comment
я ненавижу это говорить, но все же это не работает... он по-прежнему возвращает скрипт как обычный обычный html/текст   -  person JYR    schedule 07.01.2013
comment
На моей стороне работает отлично. Я не знаю, что не так с вашим действием контроллера   -  person Karthik Chintala    schedule 07.01.2013
comment
Вы имеете в виду, что окно предупреждения было отображено?   -  person JYR    schedule 07.01.2013
comment
не могли бы вы опубликовать свой полный ответ в качестве ответа на мой вопрос ... большое спасибо за ваши усилия и поддержку   -  person JYR    schedule 07.01.2013
comment
Да. Я мог видеть предупреждение. Можете ли вы показать мне, что вы написали в своем действии контроллера?   -  person Karthik Chintala    schedule 07.01.2013


Ответы (2)


Это то, что я сделал, чтобы получить предупреждение от контроллера

Вот код просмотра:

@using (@Html.BeginForm("DoSomething","secure"))
{
    <input type="submit" value="get alert" />
}

Вот код контроллера:

[HttpPost]
        public ActionResult DoSomething()
        {
            string message = "hai";
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.Append("<script type = 'text/javascript'>");
            sb.Append("window.onload=function(){");
            sb.Append("alert('");
            sb.Append(message);
            sb.Append("')};");
            sb.Append("</script>");
            //return Content("<script type='text/javascript'>alert('Hello there');</script>"); //You can get the alert with this line also
            return Content(sb.ToString(), "text/javascript");
        }

Даже нет необходимости в скрипте, он сразу показывает предупреждение при нажатии кнопки get alert

Надеюсь, поможет

person Karthik Chintala    schedule 07.01.2013
comment
Привет Картик! Спасибо за ваши усилия и поддержку. Я смог найти нужное мне решение. Мне просто нужно вернуть объект json с типом содержимого application/octet-stream. Спасибо еще раз :)) - person JYR; 08.01.2013
comment
Нет, в данном случае это не работает. +1 за ваши усилия. См. этот вопрос. В ответе есть солнце - person RajeshKdev; 16.10.2013

Мне удалось найти правильное решение здесь.

Ссылка выше была предназначена для отображения окна подтверждения перед отправкой формы и отображения предупреждения для сообщения, которое было объектом json, возвращенным моим контроллером...

return Json(new { isok = true, message = "Successfully uploaded the calendar XML file!" }, "application/octet-stream");
person JYR    schedule 08.01.2013