POST method for elements in collection












0















I'm on a .NET platform, writing an MVC application for registering attendances of Departments' Chiefs and their staff. Each of them will log into the webpage, will have a list of some people in their staff shown, then they shall check some checkboxes and select some elements from dropdownlists, and all need to be posted back to the server.



First, I have the Entities:



public class Attendance
{
public DateTime Date { get; set; }
public Chief Appointed { get; set; }
public bool Present { get; set; }
public LeaveType Leave { get; set; }
public Chief Deputy { get; set; }
}

public class Department
{
public string Name { get; set; }
public int ID { get; set; }
public Chief Head { get; set; }
public Department Parent { get; set; }
public List<Department> Children { get; set; }
}


These entities, stored in a SQL Server database, make up a repository so that when anyone logs into the web page, the Controller populates the ViewModel with a list of people in their staff only.



This filtered repository is wrapped up in the ViewModel that, for other reasons, has a constructor method:



public class ViewModel
{
public List<Attendance> Attendances { get; set; }
public List<Department> Departments { get; set; }

public ViewModel()
{
// some code
}
}


This is (part of) the View code - important note: I'm using this boostrap-switch javascript library for turning checkboxes into switches, so I can't rely on helper methods for the input elements.



@model ViewModel

@using (Html.BeginForm("Index", "Attendances", FormMethod.Post))
{
foreach (Department department in Model.Departments)
{
<script type="text/javascript">
$(document).ready(function () {
$("[id='@department.ID']").bootstrapSwitch()
});
</script>

<div>
<div>
@department.Name
</div>
</div>
<div>
<div>
@department.Head
</div>
<div>
<input type="checkbox" id="@department.ID" name="Department.ID" checked />
</div>
</div>
}

<input type="submit" value="Submit"/>
}


Now, this is where I have problems: in the controller, I have this POST method that create a new instance of the ViewModel every time is called.



[HttpPost]
public ActionResult Index(ViewModel viewModel)
{
// Register the submitted data

return View(viewModel);
}


How do I tell the code to take the collection submitted by the user into the new (empty) collection created by the controller when the user clicks on the submit button?



Thanks, Davide.










share|improve this question























  • After user clicks on submit, viewmodel collection values will come to controller. What you want to do now?

    – sri harsha
    Jan 2 at 12:59











  • How about Request.Form indexer to get checkbox value, such like viewModel.DepartmentID = Request.Form["Department.ID"].ToString()? I think you can still use HTML helpers with bootstrap-switch, just set htmlAttributes with new { @class = "..." } to style into switches.

    – Tetsuya Yamamoto
    Jan 3 at 4:17













  • In the end, the problem was the default ViewModel constructor preventing the model binding. Thanks anyway.

    – Davide Vitali
    Jan 3 at 14:39
















0















I'm on a .NET platform, writing an MVC application for registering attendances of Departments' Chiefs and their staff. Each of them will log into the webpage, will have a list of some people in their staff shown, then they shall check some checkboxes and select some elements from dropdownlists, and all need to be posted back to the server.



First, I have the Entities:



public class Attendance
{
public DateTime Date { get; set; }
public Chief Appointed { get; set; }
public bool Present { get; set; }
public LeaveType Leave { get; set; }
public Chief Deputy { get; set; }
}

public class Department
{
public string Name { get; set; }
public int ID { get; set; }
public Chief Head { get; set; }
public Department Parent { get; set; }
public List<Department> Children { get; set; }
}


These entities, stored in a SQL Server database, make up a repository so that when anyone logs into the web page, the Controller populates the ViewModel with a list of people in their staff only.



This filtered repository is wrapped up in the ViewModel that, for other reasons, has a constructor method:



public class ViewModel
{
public List<Attendance> Attendances { get; set; }
public List<Department> Departments { get; set; }

public ViewModel()
{
// some code
}
}


This is (part of) the View code - important note: I'm using this boostrap-switch javascript library for turning checkboxes into switches, so I can't rely on helper methods for the input elements.



@model ViewModel

@using (Html.BeginForm("Index", "Attendances", FormMethod.Post))
{
foreach (Department department in Model.Departments)
{
<script type="text/javascript">
$(document).ready(function () {
$("[id='@department.ID']").bootstrapSwitch()
});
</script>

<div>
<div>
@department.Name
</div>
</div>
<div>
<div>
@department.Head
</div>
<div>
<input type="checkbox" id="@department.ID" name="Department.ID" checked />
</div>
</div>
}

<input type="submit" value="Submit"/>
}


Now, this is where I have problems: in the controller, I have this POST method that create a new instance of the ViewModel every time is called.



[HttpPost]
public ActionResult Index(ViewModel viewModel)
{
// Register the submitted data

return View(viewModel);
}


How do I tell the code to take the collection submitted by the user into the new (empty) collection created by the controller when the user clicks on the submit button?



Thanks, Davide.










share|improve this question























  • After user clicks on submit, viewmodel collection values will come to controller. What you want to do now?

    – sri harsha
    Jan 2 at 12:59











  • How about Request.Form indexer to get checkbox value, such like viewModel.DepartmentID = Request.Form["Department.ID"].ToString()? I think you can still use HTML helpers with bootstrap-switch, just set htmlAttributes with new { @class = "..." } to style into switches.

    – Tetsuya Yamamoto
    Jan 3 at 4:17













  • In the end, the problem was the default ViewModel constructor preventing the model binding. Thanks anyway.

    – Davide Vitali
    Jan 3 at 14:39














0












0








0








I'm on a .NET platform, writing an MVC application for registering attendances of Departments' Chiefs and their staff. Each of them will log into the webpage, will have a list of some people in their staff shown, then they shall check some checkboxes and select some elements from dropdownlists, and all need to be posted back to the server.



First, I have the Entities:



public class Attendance
{
public DateTime Date { get; set; }
public Chief Appointed { get; set; }
public bool Present { get; set; }
public LeaveType Leave { get; set; }
public Chief Deputy { get; set; }
}

public class Department
{
public string Name { get; set; }
public int ID { get; set; }
public Chief Head { get; set; }
public Department Parent { get; set; }
public List<Department> Children { get; set; }
}


These entities, stored in a SQL Server database, make up a repository so that when anyone logs into the web page, the Controller populates the ViewModel with a list of people in their staff only.



This filtered repository is wrapped up in the ViewModel that, for other reasons, has a constructor method:



public class ViewModel
{
public List<Attendance> Attendances { get; set; }
public List<Department> Departments { get; set; }

public ViewModel()
{
// some code
}
}


This is (part of) the View code - important note: I'm using this boostrap-switch javascript library for turning checkboxes into switches, so I can't rely on helper methods for the input elements.



@model ViewModel

@using (Html.BeginForm("Index", "Attendances", FormMethod.Post))
{
foreach (Department department in Model.Departments)
{
<script type="text/javascript">
$(document).ready(function () {
$("[id='@department.ID']").bootstrapSwitch()
});
</script>

<div>
<div>
@department.Name
</div>
</div>
<div>
<div>
@department.Head
</div>
<div>
<input type="checkbox" id="@department.ID" name="Department.ID" checked />
</div>
</div>
}

<input type="submit" value="Submit"/>
}


Now, this is where I have problems: in the controller, I have this POST method that create a new instance of the ViewModel every time is called.



[HttpPost]
public ActionResult Index(ViewModel viewModel)
{
// Register the submitted data

return View(viewModel);
}


How do I tell the code to take the collection submitted by the user into the new (empty) collection created by the controller when the user clicks on the submit button?



Thanks, Davide.










share|improve this question














I'm on a .NET platform, writing an MVC application for registering attendances of Departments' Chiefs and their staff. Each of them will log into the webpage, will have a list of some people in their staff shown, then they shall check some checkboxes and select some elements from dropdownlists, and all need to be posted back to the server.



First, I have the Entities:



public class Attendance
{
public DateTime Date { get; set; }
public Chief Appointed { get; set; }
public bool Present { get; set; }
public LeaveType Leave { get; set; }
public Chief Deputy { get; set; }
}

public class Department
{
public string Name { get; set; }
public int ID { get; set; }
public Chief Head { get; set; }
public Department Parent { get; set; }
public List<Department> Children { get; set; }
}


These entities, stored in a SQL Server database, make up a repository so that when anyone logs into the web page, the Controller populates the ViewModel with a list of people in their staff only.



This filtered repository is wrapped up in the ViewModel that, for other reasons, has a constructor method:



public class ViewModel
{
public List<Attendance> Attendances { get; set; }
public List<Department> Departments { get; set; }

public ViewModel()
{
// some code
}
}


This is (part of) the View code - important note: I'm using this boostrap-switch javascript library for turning checkboxes into switches, so I can't rely on helper methods for the input elements.



@model ViewModel

@using (Html.BeginForm("Index", "Attendances", FormMethod.Post))
{
foreach (Department department in Model.Departments)
{
<script type="text/javascript">
$(document).ready(function () {
$("[id='@department.ID']").bootstrapSwitch()
});
</script>

<div>
<div>
@department.Name
</div>
</div>
<div>
<div>
@department.Head
</div>
<div>
<input type="checkbox" id="@department.ID" name="Department.ID" checked />
</div>
</div>
}

<input type="submit" value="Submit"/>
}


Now, this is where I have problems: in the controller, I have this POST method that create a new instance of the ViewModel every time is called.



[HttpPost]
public ActionResult Index(ViewModel viewModel)
{
// Register the submitted data

return View(viewModel);
}


How do I tell the code to take the collection submitted by the user into the new (empty) collection created by the controller when the user clicks on the submit button?



Thanks, Davide.







c# post model-view-controller collections






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Jan 2 at 12:21









Davide VitaliDavide Vitali

445212




445212













  • After user clicks on submit, viewmodel collection values will come to controller. What you want to do now?

    – sri harsha
    Jan 2 at 12:59











  • How about Request.Form indexer to get checkbox value, such like viewModel.DepartmentID = Request.Form["Department.ID"].ToString()? I think you can still use HTML helpers with bootstrap-switch, just set htmlAttributes with new { @class = "..." } to style into switches.

    – Tetsuya Yamamoto
    Jan 3 at 4:17













  • In the end, the problem was the default ViewModel constructor preventing the model binding. Thanks anyway.

    – Davide Vitali
    Jan 3 at 14:39



















  • After user clicks on submit, viewmodel collection values will come to controller. What you want to do now?

    – sri harsha
    Jan 2 at 12:59











  • How about Request.Form indexer to get checkbox value, such like viewModel.DepartmentID = Request.Form["Department.ID"].ToString()? I think you can still use HTML helpers with bootstrap-switch, just set htmlAttributes with new { @class = "..." } to style into switches.

    – Tetsuya Yamamoto
    Jan 3 at 4:17













  • In the end, the problem was the default ViewModel constructor preventing the model binding. Thanks anyway.

    – Davide Vitali
    Jan 3 at 14:39

















After user clicks on submit, viewmodel collection values will come to controller. What you want to do now?

– sri harsha
Jan 2 at 12:59





After user clicks on submit, viewmodel collection values will come to controller. What you want to do now?

– sri harsha
Jan 2 at 12:59













How about Request.Form indexer to get checkbox value, such like viewModel.DepartmentID = Request.Form["Department.ID"].ToString()? I think you can still use HTML helpers with bootstrap-switch, just set htmlAttributes with new { @class = "..." } to style into switches.

– Tetsuya Yamamoto
Jan 3 at 4:17







How about Request.Form indexer to get checkbox value, such like viewModel.DepartmentID = Request.Form["Department.ID"].ToString()? I think you can still use HTML helpers with bootstrap-switch, just set htmlAttributes with new { @class = "..." } to style into switches.

– Tetsuya Yamamoto
Jan 3 at 4:17















In the end, the problem was the default ViewModel constructor preventing the model binding. Thanks anyway.

– Davide Vitali
Jan 3 at 14:39





In the end, the problem was the default ViewModel constructor preventing the model binding. Thanks anyway.

– Davide Vitali
Jan 3 at 14:39












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54006308%2fpost-method-for-elements-in-collection%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54006308%2fpost-method-for-elements-in-collection%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Monofisismo

Angular Downloading a file using contenturl with Basic Authentication

Olmecas