asp.net mvc - MVC3 (Razor) How to do something with json passed data in Controller -
i've passed model in view controller following jquery ajax code:
$.ajax({ data: model, type: "post", url: '@url.action("createdoc")', datatype: "json", contenttype: "application/json; charset=utf-8", success: function (result) { alert('done '+ result.tostring()); } });
the problem is: in controller method "createdoc"
[httppost] public actionresult createdoc(ienumerable<movie> movies) { createwordprocessingdocument(movies); return json(new { result = movies.count()}); }
i can't movies enumerable data. call createwordprocessingdocument create document movies data. not. method code:
public void createwordprocessingdocument(ienumerable<movie> movies) { httpcontextwrapper context = new httpcontextwrapper(system.web.httpcontext.current); context.response.clear(); context.response.buffer = true; context.response.addheader("content-disposition", "attachment;filename=example.doc"); context.response.contenttype = "application/vnd.ms-word.document"; context.response.charset = ""; stringbuilder sb = new stringbuilder(); sb.appendline("<p align='center'><b> general title</b></p>"); sb.append("<br>"+movies.count()); (int = 0; < movies.count(); i++) { sb.append("<br>title:" + movies.elementat(i).title +""); } context.response.output.write(sb.tostring()); context.response.flush(); context.response.end(); }
but doesn't work: returns ajax post , pop ups "done" alert, result.tostring() showing html code create on createwordprocessingdocument method. how can avoid behaviour can data pass controller view? thanks.
asp.net mvc includes fileresult
in order return file mime type browser.
do instead:
public actionresult createdoc(ienumerable<movie> movies) { byte[] filecontents = createfilefrommovies(movies); return file(filecontents, "application/vnd.ms-word.document"); }
instead of accessing response directly, create document byte array , return content using file()
method.
Comments
Post a Comment