so creating survey monkey, survey has 4 categories, , each category has 5 questions, homecontroller index passes on 20 questions questions entity , each questions must have range slider values 1 5, form values must collected method in controller, accumulated questionresults table , processed, must passed onto categoryresults , each category, out of 4, must have accumulated score, must compared categoryfeedback(which static) table , display correct information. code homecontroller , it's index below.
the main issue having, since passing on form values through parameter of formcollection, struggling keep relationship of question belonging category , passing these onto categoryresult table processing.
any appreciated
models:
question
using system; using system.collections.generic; using system.linq; using system.web; namespace stra.models { public class question { public int id { get; set; } public string title { get; set; } public string createdby { get; set; } public datetime? datecreated { get; set; } public datetime? datemodified { get; set; } public virtual category category { get; set; } public int categoryid { get; set; } public virtual icollection<questionresult> questionresult { get; set; } public virtual icollection<questionfeedback> questionfeedback { get; set; } } }
questionresult
using identitysample.models; using system; using system.collections.generic; using system.linq; using system.web; namespace stra.models { public class questionresult { public int id { get; set; } public datetime? datecreated { get; set; } public datetime? datemodified { get; set; } public int questionscore { get; set; } //navigation properties public virtual applicationuser user { get; set; } public icollection<categoryresult> categoryresult { get; set; } public virtual question question { get; set; } public int questionid { get; set; } } }
categoryresult
using identitysample.models; using system; using system.collections.generic; using system.linq; using system.text; namespace stra.models { public class categoryresult { public int id { get; set; } public int categoryscore {get;set;} //navigation properties public virtual questionresult questionresult { get; set; } public int questionresultid { get; set; } } }
any appreciated. homecontroller index
@model ienumerable<stra.models.question> @{ //viewbag.question.title = "survey"; layout = "~/views/shared/_quizlayout.cshtml"; } <div class="hr hr-18 hr-double dotted"></div> <div class="widget-box"> <div class="widget-header widget-header-blue widget-header-flat"> <h4 class="widget-title lighter">stra</h4> @*<div class="widget-toolbar"> <label> <small class="green"> <b>validation</b> </small> <input id="skip-validation" type="checkbox" class="ace ace-switch ace-switch-4" /> <span class="lbl middle"></span> </label> </div>*@ </div> @*"create","home"*@ @using (html.beginform("create", "home", formmethod.post)) { @html.antiforgerytoken() <div class="widget-body"> <div class="widget-main"> <!-- #section:plugins/fuelux.wizard --> <div id="fuelux-wizard-container"> <div class="col-md-12 center"> <div class="easy-pie-chart percentage" data-percent="25" data-color="#2679b5"> @*<span class="percent">20</span>%*@ </div> </div> <div style="display:none;"> <!-- #section:plugins/fuelux.wizard.steps --> <ul class="steps"> <li data-step="1" class="active"> <span class="step">1</span> <span class="question.title">validation states</span> </li> <li data-step="2"> <span class="step">2</span> <span class="question.title">alerts</span> </li> <li data-step="3"> <span class="step">3</span> <span class="question.title">payment info</span> </li> <li data-step="4"> <span class="step">4</span> <span class="question.title">other info</span> </li> </ul> <!-- /section:plugins/fuelux.wizard.steps --> </div> <hr /> <!-- #section:plugins/fuelux.wizard.container --> <div class="step-content pos-rel"> <div class="step-pane" data-step="1"> @{ foreach (var item in model.take(5)) { <div class="col-md-12"> <h4>@html.displayfor(modelitem => item.title)</h4> <div id="slider-eq"> <h5 class="pull-left">strongly disagree</h5> <h5 class="pull-right">strongly agree</h5> <span id="q_@html.displayfor(modelitem => item.id)" class="ui-slider-purple">3</span> <input type="hidden" id="question_@item.id" name="question_@item.id" value="3" /> </div> </div> } //model.skip(5); } </div> <div class="step-pane" data-step="2"> @*<div class="center"> <h3 class="blue lighter">this step 2</h3> </div>*@ @{ foreach (var item in model.skip(5).take(5)) { <div class="col-md-12"> <h4>@html.displayfor(modelitem => item.title)</h4> <div id="slider-eq"> <h5 class="pull-left">strongly disagree</h5> <h5 class="pull-right">strongly agree</h5> <span id="q_@html.displayfor(modelitem => item.id)" class="ui-slider-purple">3</span> <input type="hidden" id="question_value" name="question_value" value="3" /> <input type="hidden" id="questonid" name="questonid" value="@item.id" /> @*<span class="ui-slider-red">55</span> *@></div> </div> } } </div> <div class="step-pane" data-step="3"> @*<div class="center"> <h3 class="blue lighter">this step 3</h3> </div>*@ @{ foreach (var item in model.skip(10).take(5)) { <div class="col-md-12"> <h4>@html.displayfor(modelitem => item.title)</h4> <div id="slider-eq"> <h5 class="pull-left">strongly disagree</h5> <h5 class="pull-right">strongly agree</h5> <span id="q_@html.displayfor(modelitem => item.id)" class="ui-slider-purple">3</span> <input type="hidden" id="question_@item.id" name="question_@item.id" value="3" /> @*<span class="ui-slider-red">55</span> *@ </div> </div> } } </div> <div class="step-pane" data-step="4"> @*<div class="center"> <h3 class="blue lighter">this step 4</h3> </div>*@ @{ foreach (var item in model.skip(15).take(5)) { <div class="col-md-12"> <h4>@html.displayfor(modelitem => item.title)</h4> <div id="slider-eq"> <h5 class="pull-left">strongly disagree</h5> <h5 class="pull-right">strongly agree</h5> <span id="q_@html.displayfor(modelitem => item.id)" class="ui-slider-purple">3</span> <input type="hidden" id="question_@item.id" name="question_@item.id" value="3" /> @*<span class="ui-slider-red">55</span> *@ </div> </div> } } </div> </div> <!-- /section:plugins/fuelux.wizard.container --> </div> <hr /> <div class="wizard-actions"> <!-- #section:plugins/fuelux.wizard.buttons --> <button type="button" id="previous" class="btn btn-prev"> <i class="ace-icon fa fa-arrow-left"></i> prev </button> <button type="button" id="next" class="btn btn-success btn-next" @*data-last="finish"*@> next <i class="ace-icon fa fa-arrow-right icon-on-right"></i> </button> <button id="finish" class="btn btn-success" type="submit"> submit <i class="ace-icon fa fa-arrow-right icon-on-right"></i> </button> <!-- /section:plugins/fuelux.wizard.buttons --> </div> <!-- /section:plugins/fuelux.wizard --> </div><!-- /.widget-main --> </div> <!-- /.widget-body --> } </div>
homecontroller
using system.data.entity; using system.linq; using system.net; using system.web; using system.web.mvc; using identitysample.models; using stra.models; using system.collections.generic; using system.diagnostics; using system; using microsoft.aspnet.identity; using microsoft.aspnet.identity.entityframework; namespace identitysample.controllers { [authorize] public class homecontroller : controller { private applicationdbcontext db = new applicationdbcontext(); //public actionresult index() public actionresult index() { if (user.isinrole("admin")) { return redirecttoaction("index", "dashboard"); } if (user.isinrole("sales consultant")) { return redirecttoaction("index", "reports"); } //loads questions in //var questions = db.questions.include(s => s.survey).include(c => c.category); var questions = db.questions.include(c => c.category); return view(questions.tolist()); //var questionresults = db.questionresults.include(c => c.question); //return view(questionresults.tolist()); //viewmodel attempt //var viewmodel = new surveyviewmodels(); //viewmodel.questions = db.questions // .include(i =>) } [httppost] public actionresult index(formcollection result) { list<questionresult> info = new list<questionresult>(); questionresult newresult = new questionresult(); var appuser = new applicationusermanager(new userstore<applicationuser>(db)); applicationuser user = appuser.findbyid(user.identity.getuserid()); foreach (var key in result.allkeys.where(k => k.contains("question")).toarray<string>()) { string[] keys = key.split(new char[] { '_' }, stringsplitoptions.removeemptyentries); if (key.count() > 1) { questionresult re = new questionresult(); re.questionscore = convert.toint32(result[key]); re.questionid = convert.toint32(keys[1]); re.user = user; db.questionresults.add(re); } } db.savechanges(); debug.writeline(result[0]); return view(); } } }
jquery ui slider plugin
$("#slider-eq > span").css({ width: '100%', 'float': 'left', margin: '15px' }).each(function () { // read initial values markup , remove var value = parseint($(this).text(), 10); $(this).empty().slider({ value: value, min: 1, max: 5, range: "min", animate: true, change: function (event, ui) { //alert(ui.value); $(this).next("[id^=question_]").val(ui.value); //$(this > ).slider("values", $this.data("index"), $this.val()); } }); });
i in razortemplate add question category prefix question_id or question_name comes through via formcollection
<input type="hidden" id="@(item.category_id)_question_@item.id" name="@(item.category_id)_question_@item.id" value="3" />
then in controller action, pull out category_id start of name, know category iterating through.
Comments
Post a Comment