0

我对网络很陌生,正在尝试了解我们当前项目中发生的情况。对于我们的一个单页应用程序,控制器返回整个区域的单个视图。

[HttpGet]
[Url("admin")]
public virtual ActionResult Index()
{
    return View(Admin);
}

在实际的 Admin.cshtml 中,我们创建了一个主干路由器,该路由器为页面的该部分进行了初始化,并为该单页应用程序部分提供了不同的视图。我的问题是,我想在路线上创建一个动作

admin/import/upload

那看起来怎么样?我不想实际返回一个视图,但我想在该路由被命中时调用一个函数来验证上传的文件并返回有关该文件的 JSON 信息。

4

2 回答 2

0
(function() {
    window.App = {
        Router: {}
        View: {}
    };

    App.Router = Backbone.Router.extend({

        routes: {
            '*AreaName/admin/import/upload': 'upload'
        },

        upload: function() {
            var upload= new App.View.upload();
        },

    });

    $(document).ready(function() {
        window.routes = new App.Router;
        Backbone.history.start({ pushState: true });
    });

})();
于 2013-11-12T08:19:09.683 回答
0

您需要为上传的文件定义一个具有属性的模型,如下所示,它应该是HttpPostedFileBase.

public class UploadModel
{
    [Required(ErrorMessage="Please choose a file to upload.")]
    public HttpPostedFileBase Photo { get; set; }
}

然后你需要让你的动作接受指定的模型并返回JavaScript而不是View.

public ActionResult Upload(UploadModel model)
{
    //only continue if the model is valid (i.e. all the required fields have been set)
    if (ModelState.IsValid)
    {
        string json = "";//build your JSON here
        //return the JSON as a javascript response (with the correct headers, etc)
        return JavaScript(json);
    }

    return View(model);
}
于 2013-11-12T11:45:30.207 回答