c# - MVC 5 ASP.NET Entity Framework Collect Form Data through Range Input -


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