По умолчанию FileWriter
перезапишет файл. Что вы можете сделать, так это определить читателя следующим образом: new FileWriter("encoded.txt", true)
Таким образом, файл будет добавлен вместо того, чтобы быть перезаписанным. Надеюсь, это поможет!
После нескольких дней возни, ломания и исправления я нашел решение, которое сработало для меня.
Как было предложено выше, я передал свою строку из функции заполнения данных в действие, а затем в представление с использованием модели. Однако это было не так просто. функция createchart ожидает объект json (мне потребовалось время, чтобы понять, в чем проблема). передача строки как есть переменной в частичном представлении сделала много ужасных вещей с двойными кавычками и одинарными кавычками, которые были внутри строки. В конце концов я понял, что строку нужно передавать как json, чтобы правильно видеть цитаты в представлении.
Как только это было рассортировано, я просто убирал все, что я сломал, пытаясь выяснить проблему.
Фрагмент частичного просмотра
var string = JSON.parse(@(Html.Raw(Json.Encode(Model.flare))));
//data = flare;
createchart(string);
Фрагмент контроллера
public ActionResult RefreshView(int id)
{
CWDataSetsEntities aCWDatasetEntity = new CWDataSetsEntities();
int intCountryID = Convert.ToInt32(id);
CWCountriesISOandCoordinates aCWCountry = new CWCountriesISOandCoordinates();
aCWCountry = (from x in aCWDatasetEntity.CWCountriesISOandCoordinates where x.index == intCountryID select x).SingleOrDefault();
string Country = aCWCountry.Country_Name;
Models.PartitionViewModels Data = sb_admin_2.Web.ContentBuilder.PartitionBuilder.TradeVisual("Export", Country, "X2015");
//sb_admin_2.Web.Models.PartitionViewModels.Javascript = Data;
ViewBag.Data = Data;
return PartialView("DataPartition", Data);
}
Сценарий события
<script>
$(function () {
$("#Partitionbox").change(function (e) {
var val = $(this).val();
$("#DataPart").remove();
$('#hint').remove();
$('#footer').remove();
$("#TestTarget").load("/Home/RefreshView/" + val);
});
});
Предполагая, что у вас есть определенные требования для использования частичного представления, вы можете найти, как перезагрузить в этой статье . Посмотрите на второй ответ, который лучше.
Теперь, если вы хотите только заполнить диаграмму, почему бы просто не вызвать функцию «createchart» снова после изменения ваших данных в файле .js? Тогда вам вообще не придется использовать частичное представление.
jQuery(document).ready(function() {
$("#Partitionbox").change(function() {
var id = $(this).find(":selected").text()
var selectid = {
"id": id
}
$.ajax({
url: '@Url.Action("RefreshView")',
data: JSON.stringify(selectid),
type: 'POST',
contentType: 'application/json; charset=utf-8',
success: function(data) {
// Variable data contains the data you get from the action method
//$('#DPartition').load(data);
createchart(data);
},
});
});
var w = 600,
h = 400,
x = d3.scale.linear().range([0, w]),
y = d3.scale.linear().range([0, h]);
var vis = d3.select("#top").append("div")
.attr("class", "chart")
.style("width", w + "px")
.style("height", h + "px")
.append("svg:svg")
.attr("width", w)
.attr("height", h);
var partition = d3.layout.partition()
.value(function(d) {
return d.size;
});
var data = flare;
createchart(data);
function refreshview() {
setInterval(function() {
$('#contributors').load('/Home/GetContributor');
}, 10000); // every 3 sec
};
function createchart(root) {
var g = vis.selectAll("g")
.data(partition.nodes(root))
.enter().append("svg:g")
.attr("transform", function(d) {
return "translate(" + x(d.y) + "," + y(d.x) + ")";
})
.on("click", click);
var kx = w / root.dx,
ky = h / 1;
g.append("svg:rect")
.attr("width", root.dy * kx)
.attr("height", function(d) {
return d.dx * ky;
})
.attr("class", function(d) {
return d.children ? "parent" : "child";
});
g.append("svg:text")
.attr("transform", transform)
.attr("dy", ".35em")
.style("opacity", function(d) {
return d.dx * ky > 12 ? 1 : 0;
})
.text(function(d) {
return d.name + ": $" + d.size;
})
d3.select(window)
.on("click", function() {
click(root);
})
function click(d) {
if (!d.children) return;
kx = (d.y ? w - 40 : w) / (1 - d.y);
ky = h / d.dx;
x.domain([d.y, 1]).range([d.y ? 40 : 0, w]);
y.domain([d.x, d.x + d.dx]);
var t = g.transition()
.duration(d3.event.altKey ? 7500 : 750)
.attr("transform", function(d) {
return "translate(" + x(d.y) + "," + y(d.x) + ")";
});
t.select("rect")
.attr("width", d.dy * kx)
.attr("height", function(d) {
return d.dx * ky;
});
t.select("text")
.attr("transform", transform)
.style("opacity", function(d) {
return d.dx * ky > 12 ? 1 : 0;
});
d3.event.stopPropagation();
}
function transform(d) {
return "translate(8," + d.dx * ky / 2 + ")";
}
};
document.getElementById('footer').append(footer);
var ele = document.createElement("div");
ele.classList.add("hint");
ele.append(hint);
document.getElementById('footer').appendChild(ele);
});
<table class="tg">
<tr>
<td class="tg-0lax">@Html.Partial("SPPDVis1")</td>
<td class="tg-0lax">@Html.Partial("SPPDVis2")</td>
</tr>
<tr>
<td class="tg-0lax">@Html.Partial("SPPDVis3")</td>
<td class="tg-0lax">@Html.Partial("SPPDVis4")</td>
</tr>
<tr>
<td id="DataPartition" class="tg-0lax">
@Html.DropDownList("Partitionbox", Model.Countries, "Select Country")
<button id="button1" type="submit" class="btn btn-primary">Get Data</button>
<div id="DPartition">
</div>
</td>
</tr>
</table>
Надеюсь, что смогу хоть немного помочь. Удачного кодирования:)