PDA

View Full Version : سوال: وابستگی اطلاعات دو جدول در DropDownList



alireza.tabesh
سه شنبه 07 خرداد 1392, 12:26 عصر
[HttpPost]

public ActionResult Create(Agent agent)



{


if (ModelState.IsValid)



{

db.Agents.Add(agent);

db.SaveChanges();


return RedirectToAction("Index");



}


ViewBag.InsuranceId = new SelectList(db.InsuranceCompanies, "InsuranceId", "InsuranceName", agent.InsuranceId);

ViewBag.BranchId = new SelectList(db.Branches, "BranchId", "BranchName", agent.BranchId);

return View(agent);



}




سلام
میخوام توی سایت طوری کار کنم که Branch وابسته به InsuranceCompany باشه . یعنی اول Insurance انتخاب بشه بعد Branch زیر مجموعه اون لود بشه . چه تغییری باید به کد بدم. ممنون میشم راهنمایی کنید.

parvizwpf
چهارشنبه 08 خرداد 1392, 02:10 صبح
برو سمت jquery.ajax که سوال کرده بودی. و مطالعه ای روی jsonResult داشته باش.

forestasphalt
یک شنبه 12 خرداد 1392, 14:50 عصر
توی این کد از kendo ui dropdown استفاده شده


<script type="text/javascript">
$(document).ready(function () {
$(".loading").show();
$.ajax(
{
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: 'json',
url: 'WebService1.asmx/Get_Data_Category',
success: function (json) {
data = eval('(' + json.d + ')');

$("#color").kendoDropDownList({
dataTextField: "Title",
dataValueField: "Id",
dataSource: data,
index: 0,
change: onChange
});


$("#size").kendoDropDownList();

var color = $("#color").data("kendoDropDownList");

color.select(0);
var size = $("#size").data("kendoDropDownList");

function onChange() {
var value = $("#color").val();
$(".loadings").show("slow");
$("#cap")
.toggleClass("black-cap", value == 1)
.toggleClass("orange-cap", value == 2)
.toggleClass("grey-cap", value == 3);

var Catname = $('#options').text().trim();
var param = { Catname: Catname }
$.ajax(
{
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: 'json',
data: JSON.stringify(param),
url: 'WebService1.asmx/Get_Data_Category_By_CatName',
success: function (json) {
data = eval('(' + json.d + ')');

$("#colors").kendoDropDownList({
dataTextField: "Title",
dataValueField: "Id",
dataSource: data,
index: 0,
change: onChange
});
$(".loadings").hide();


$("#size").kendoDropDownList();

var color = $("#colors").data("kendoDropDownList");

color.select(0);
var size = $("#size").data("kendoDropDownList");

function onChange() {
var value = $("#colors").val();

$("#cap")
.toggleClass("black-cap", value == 1)
.toggleClass("orange-cap", value == 2)
.toggleClass("grey-cap", value == 3);

};


},
error: function (xhr) {
alert(xhr.responseText)
}

}); //end ajax

};




},
error: function (xhr) {
alert(xhr.responseText)
}

}); //end ajax




});
</script>


اگر کندو رو نداری از این سایت (http://kendoui.com)دانلود کن
بعد داخل وب سرویس کد زیر رو بنویس این دو تا
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
اضافه کن (برای دانلودJson از nuget استفاده کن یا توی اینترنت جستجو کن دانلود کن )


[WebMethod]
public string Get_Data_Category()
{

PerspolisEntities1 db = new PerspolisEntities1();
string Jsonstr = "";
List<Class_Category> List = new List<Class_Category>();
// var q = (from p in db.Category orderby p.Id descending select p.Title).Distinct();

var q = from p in db.Category where p.Title.Equals("نام شاخه را انتخاب کنید") select p.Title;
var q2 = (from p in db.Category where !p.Title.Equals("نام شاخه را انتخاب کنید") select p.Title).Distinct();


var concat = q.Concat(q2);



foreach (var item in concat)
{
Class_Category listmode = new Class_Category();
//listmode.id = item.Id;
listmode.Title = item;
List.Add(listmode);
}
IsoDateTimeConverter timeConverter = new IsoDateTimeConverter();
timeConverter.DateTimeFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss";
Jsonstr = JsonConvert.SerializeObject(List);
return Jsonstr;

}
[WebMethod]
public string Get_Data_Category_By_CatName(string Catname)
{
using (var db = new PerspolisEntities1())
{
Catname = Catname.Substring(0, Catname.Length - 6);
string Jsonstr = "";
List<Class_Category> List = new List<Class_Category>();
var q = db.Category.Where(p => p.Title.Equals(Catname)).Select(p=>p.Sub_Cattitle).Distinct();

int count = q.Count();
foreach (var item in q)
{
Class_Category listmode = new Class_Category();
//listmode.id = item.Id;
listmode.Title = item;
List.Add(listmode);
}
IsoDateTimeConverter timeConverter = new IsoDateTimeConverter();
timeConverter.DateTimeFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss";
Jsonstr = JsonConvert.SerializeObject(List);
System.Threading.Thread.Sleep(200);
return Jsonstr;


}//end using


}


م
یکم هم توضیح بدم برای پر شدن dropdown اولی یه درخواست ajax دادم و اطلاعات به صورت json برگردوندم ودر onchange دراپ دان بازم یه درخواست ajax دیگه دادم همین
راستی برای اینکه اطلاعات رو بتونم به فرمت json تبدیل کنم من اومدم یه کلاس دیگه بهش dto میگن ایجاد کردم


public class Class_Category
{
public string Id { get; set; }
public string Title { get; set; }


بعد اطلاعات رو به فرمت json برگردوندم
اگه کارت راه نیافتاد بگو برات توی پروژه جداگانه انجام بدم و بفرست

alireza.tabesh
یک شنبه 12 خرداد 1392, 21:46 عصر
ممنون از محبتت انجام شد فقط مشکل save توی دیتا بیس دارم

forestasphalt
دوشنبه 13 خرداد 1392, 10:43 صبح
توی save چه مشکلی داری؟

alireza.tabesh
دوشنبه 13 خرداد 1392, 11:07 صبح
یکم باهاش ور میرم نشد میپرشم . ممنون از راهنمایی

alireza.tabesh
سه شنبه 14 خرداد 1392, 10:13 صبح
من از این روش استفاده کردم توی وابستگی اطلاعاتش مشکلم حل شد ولی برای save کردنش نه
روشم کلاً اشتباهه؟ الزاما اینجور مواقع از kendo ui استفاده میکنند؟


<div id="NameList"></div>






<div>

<script type="text/javascript">

$('#Relation').change(function () {

$.getJSON('/Find/GetNames/' + $('#RelationId').val(), function (data) {

var items = '<select id="newSel">';

$.each(data, function (i, Names) {

items += '<option>' + Names.FirstName + ' ' + Names.LastName + '</option>';



});


items += '</select>';

$('#NameList').html(items);



});

});


</script>

</div>





اطلاعاتم رو هم توسط این نابع دریافت می کنم


public JsonResult GetNames (int id)



{


var result = from x in db.Names

where x.RelationId == id

select new { x.FirstName, x.LastName };

return Json(result, JsonRequestBehavior.AllowGet);



}

alireza.tabesh
سه شنبه 14 خرداد 1392, 13:56 عصر
از جاوا اسکریپت به شکل زیر استفاده کردم درست شد:

<script type="text/javascript">

$('#rdbRelation').empty();

$.getJSON('/Name/GetRelations/', function (data) {

$.each(data, function (i, Relations) {

var option = $('<option></option>').attr("value", data[i].RelationId).text(data[i].RelationName);

$('#rdbRelation').append(option);



});

});


</script>


البته dropdown رو اولش ساختم و توسط ViewBag پرش کردم. بعد اومدم اطلاعات dropdown را یکبار پاک کردم یکبار هم با جاوا اسکریپتی که گفتم پرش کردم. توی save هم مشکلی نداشت.
تو کد قبلی dropdown نداشتم فقط اومده بودم یک select ساخته بودم

forestasphalt
سه شنبه 14 خرداد 1392, 16:09 عصر
kendo ui برای دلنشین تر شدن کاره یه چیزایی تو مایه های jquery ui اصراری در استفاده ازش نیست